[iOS] Fix SafeArea arrange insets using incorrect bounds in SizeThatFits #30457
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Description
Fixes an issue where SafeArea arrange insets were incorrectly calculated due to a mismatch between the measure and arrange phases in
MauiView
on iOS.Problem
The issue occurred because
SizeThatFits
andLayoutSubviews
were using inconsistent bounds calculations for SafeArea:SizeThatFits
: Measured content without considering SafeArea insets, returning a size based on content aloneLayoutSubviews
: Applied SafeArea insets during arrange usingAdjustForSafeArea
, reducing the available spaceThis mismatch caused the parent view to allocate space based on the unadjusted size, but the child layout would arrange within the SafeArea-adjusted (smaller) bounds, leading to incorrect layout positioning.
Example
Given this XAML:
The Entry would be positioned incorrectly within the VerticalStackLayout due to the bounds calculation mismatch.
Solution
Modified
SizeThatFits
inMauiView.cs
to:AdjustForSafeArea
to determine when SafeArea should be appliedThis ensures consistency between the measure and arrange phases, with both accounting for SafeArea insets appropriately.
Changes
SizeThatFits
method insrc/Core/src/Platform/iOS/MauiView.cs
Issue24246
to validate the fixTesting
Fixes #24246.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.