Fix CarouselView layout issues on iOS/Catalyst by properly handling size constraints #30547
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!
Problem
The CarouselView was experiencing layout issues on iOS/Catalyst where:
CarouselViewController
was incorrectly getting itsItemSize
fromUICollectionViewController.CollectionView.Bounds
before proper layoutRoot Cause
The issue was in
CarouselViewHandler.iOS.cs
where:GetDesiredSize
method only calledGetDesiredSizeFromHandler
without considering explicit constraintsSolution
1. Enhanced GetDesiredSize Method
Modified
CarouselViewHandler.iOS.cs
to overrideGetDesiredSize
with proper constraint handling:2. Added PlatformArrange Override
Added
PlatformArrange
method to update layout constraints with actual arranged size:3. Test Enablement
TEST_FAILS_ON_CATALYST
conditional compilationHow the Fix Works
Constraint Handling: When explicit width/height constraints are provided, they are used directly instead of relying on potentially uninitialized collection view bounds
Layout Updates: During the arrange phase, the layout's constraints are updated with the actual arranged size, ensuring proper sizing
Fallback Behavior: When both dimensions are explicitly set, it falls back to the base implementation for full constraint handling
Testing
This fix ensures that CarouselView layouts work correctly on iOS/Catalyst by using actual layout constraints instead of uninitialized bounds and updating layout constraints during the arrange phase.
Fixes #30546.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.