Fix for constraint SafeArea loop crash. #5703
Open
+13
−9
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.
First time contributor checklist
Contributor checklist
Description
This is to fix a crash that occurs on specific devices in landscape. There was an edge case issue with constraints and safeArea causing the views layout to loop and eventually crash.
Steps to reproduce the crash:
The share sheet will not present and memory will constantly grow. The app will eventually crash.
To Verify the reason for the crash you can add
-UIViewLayoutFeedbackLoopDebuggingThreshold 50
to the apps run arguments and set an all exceptions breakpoint with the following actionpo [_UIViewLayoutFeedbackLoopDebugger layoutFeedbackLoopDebugger]
Issue:
The constraints on the actionSheets scrollView subviews would adjust to to avoid the safeArea, this in turn would resize the scrollview. In most cases this works correctly but if the size of the subview was within a small range of the maximum scrollView size a constraint loop would occur where resizing the scrollView would relayout the subviews which would no longer be affected by the safeArea causing the scrollView to resize again. This would continue to infinitely resize these views in a layout loop.
Solution:
To solve this issue I moved the handling of the safeArea to the scrollView and altered a few layout parameters to compensate for this change.