@@ -14,6 +14,11 @@ public class StructuredItemsViewController2<TItemsView> : ItemsViewController2<T
1414 public const int HeaderTag = 111 ;
1515 public const int FooterTag = 222 ;
1616
17+ View _headerView ;
18+ View _footerView ;
19+ EventHandler _footerMeasureInvalidated ;
20+ EventHandler _headerMeasureInvalidated ;
21+
1722 bool _disposed ;
1823
1924 public StructuredItemsViewController2 ( TItemsView structuredItemsView , UICollectionViewLayout layout )
@@ -40,7 +45,11 @@ protected override void Dispose(bool disposing)
4045
4146 if ( disposing )
4247 {
48+ if ( _headerView != null )
49+ _headerView . MeasureInvalidated -= _headerMeasureInvalidated ;
4350
51+ if ( _footerView != null )
52+ _footerView . MeasureInvalidated -= _footerMeasureInvalidated ;
4453 }
4554
4655 base . Dispose ( disposing ) ;
@@ -115,26 +124,54 @@ void UpdateTemplatedSupplementaryView(TemplatedCell2 cell, NSString elementKind)
115124
116125 if ( isHeader )
117126 {
127+ if ( _headerView != null )
128+ _headerView . MeasureInvalidated -= _headerMeasureInvalidated ;
129+
118130 if ( ItemsView . Header is View headerView )
119131 {
132+ _headerView = headerView ;
120133 cell . Bind ( headerView , ItemsView ) ;
121134 }
122135 else if ( ItemsView . HeaderTemplate is not null )
123136 {
137+ _headerView = ( View ) ItemsView . HeaderTemplate . CreateContent ( ) ;
124138 cell . Bind ( ItemsView . HeaderTemplate , ItemsView . Header , ItemsView ) ;
125139 }
140+
141+ _headerMeasureInvalidated = ( s , e ) =>
142+ {
143+ var indexPath = CollectionView . GetIndexPathForSupplementaryView ( cell ) ;
144+ if ( indexPath != null )
145+ CollectionView . ReloadItems ( [ indexPath ] ) ;
146+ } ;
147+
148+ _headerView . MeasureInvalidated += _headerMeasureInvalidated ;
126149 cell . Tag = HeaderTag ;
127150 }
128151 else
129152 {
153+ if ( _footerView != null )
154+ _footerView . MeasureInvalidated -= _footerMeasureInvalidated ;
155+
130156 if ( ItemsView . Footer is View footerView )
131157 {
158+ _footerView = footerView ;
132159 cell . Bind ( footerView , ItemsView ) ;
133160 }
134161 else if ( ItemsView . FooterTemplate is not null )
135162 {
163+ _footerView = ( View ) ItemsView . FooterTemplate . CreateContent ( ) ;
136164 cell . Bind ( ItemsView . FooterTemplate , ItemsView . Footer , ItemsView ) ;
137165 }
166+
167+ _footerMeasureInvalidated = ( s , e ) =>
168+ {
169+ var indexPath = CollectionView . GetIndexPathForSupplementaryView ( cell ) ;
170+ if ( indexPath != null )
171+ CollectionView . ReloadItems ( [ indexPath ] ) ;
172+ } ;
173+
174+ _footerView . MeasureInvalidated += _footerMeasureInvalidated ;
138175 cell . Tag = FooterTag ;
139176 }
140177 }
0 commit comments