Skip to content

Commit 1dc2f6c

Browse files
kubaflormarinho
authored andcommitted
Fix #12429
1 parent a1d4c70 commit 1dc2f6c

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/Controls/src/Core/Handlers/Items/iOS/StructuredItemsViewController.cs

+31
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ protected override void Dispose(bool disposing)
4646
_footerViewFormsElement.MeasureInvalidated -= OnFormsElementMeasureInvalidated;
4747
}
4848

49+
if (_headerUIView is MauiView hv)
50+
{
51+
hv.LayoutChanged -= HeaderView_LayoutChanged;
52+
}
53+
54+
if (_footerUIView is MauiView fv)
55+
{
56+
fv.LayoutChanged -= FooterView_LayoutChanged;
57+
}
58+
4959
_headerUIView = null;
5060
_headerViewFormsElement = null;
5161
_footerUIView = null;
@@ -105,15 +115,26 @@ internal void UpdateFooterView()
105115
UpdateSubview(ItemsView?.Footer, ItemsView?.FooterTemplate, FooterTag,
106116
ref _footerUIView, ref _footerViewFormsElement);
107117
UpdateHeaderFooterPosition();
118+
119+
if (_footerUIView is MauiView mv)
120+
{
121+
mv.LayoutChanged += FooterView_LayoutChanged;
122+
}
108123
}
109124

110125
internal void UpdateHeaderView()
111126
{
112127
UpdateSubview(ItemsView?.Header, ItemsView?.HeaderTemplate, HeaderTag,
113128
ref _headerUIView, ref _headerViewFormsElement);
114129
UpdateHeaderFooterPosition();
130+
131+
if(_headerUIView is MauiView mv)
132+
{
133+
mv.LayoutChanged += HeaderView_LayoutChanged;
134+
}
115135
}
116136

137+
117138
internal void UpdateSubview(object view, DataTemplate viewTemplate, nint viewTag, ref UIView uiView, ref VisualElement formsElement)
118139
{
119140
uiView?.RemoveFromSuperview();
@@ -239,5 +260,15 @@ internal void UpdateLayoutMeasurements()
239260
if (_footerViewFormsElement != null)
240261
HandleFormsElementMeasureInvalidated(_footerViewFormsElement);
241262
}
263+
264+
private void HeaderView_LayoutChanged(object sender, EventArgs e)
265+
{
266+
HandleFormsElementMeasureInvalidated(_headerViewFormsElement);
267+
}
268+
269+
private void FooterView_LayoutChanged(object sender, EventArgs e)
270+
{
271+
HandleFormsElementMeasureInvalidated(_footerViewFormsElement);
272+
}
242273
}
243274
}

src/Core/src/Platform/iOS/MauiView.cs

+9
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ public override void LayoutSubviews()
137137
}
138138

139139
CrossPlatformArrange(bounds);
140+
OnLayoutChanged();
140141
}
141142

142143
public override void SetNeedsLayout()
@@ -198,5 +199,13 @@ public override void MovedToWindow()
198199
_movedToWindow?.Invoke(this, EventArgs.Empty);
199200
TryToInvalidateSuperView(true);
200201
}
202+
203+
[UnconditionalSuppressMessage("Memory", "MEM0001", Justification = IUIViewLifeCycleEvents.UnconditionalSuppressMessage)]
204+
internal event EventHandler? LayoutChanged;
205+
206+
private void OnLayoutChanged()
207+
{
208+
LayoutChanged?.Invoke(this, EventArgs.Empty);
209+
}
201210
}
202211
}

0 commit comments

Comments
 (0)