Skip to content

Commit 4b8dda5

Browse files
committed
CollectionView2 Items display issue when Header is resized on iOS
1 parent 2304b2e commit 4b8dda5

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/Controls/src/Core/Handlers/Items2/iOS/StructuredItemsViewController2.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue25362.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ public Issue25362(TestDevice device) : base(device)
1313

1414
[Test]
1515
[Category(UITestCategories.CollectionView)]
16-
[FailsOnIOSWhenRunningOnXamarinUITest("This is not working for CV2 yet")]
17-
[FailsOnMacWhenRunningOnXamarinUITest("This is not working for CV2 yet")]
1816
public void HeaderShouldNotCollapseWithItems()
1917
{
2018
App.WaitForElement("button");

0 commit comments

Comments
 (0)