Ensure MSFNotification doesn't internally handle safe areas #2099
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.
Platforms Impacted
Description of changes
By default,
UIHostingController
will internally handle safe areas by growing the hosting view correspondingly (to allow the content to clear the unsafe area).This sometimes caused a layout feedback loop (and a hang) in
MSFNotification
.To hide, we slide the notification beyond the host view edge to which it was constrained. This can cause it to be in the unsafe area, which causes the hosting view to grow (because of the safe area region handling behavior). This triggers a synchronous layout pass to shift the view even further away to satisfy the new constraints, which causes it to grow again. This repeats indefinitely and the app hangs.
This doesn't always repro - we need a special combo of soft keyboard (which causes a safe area mismatch between SwiftUI and UIKit) and specific notification positioning. Regardless, this view (and probably most other leaf node views) should not internally handle safe areas. So I'm exposing the safeAreaRegions API, and setting it to an empty array for the notification view.
Verification
Reproduced hang in product and in a small test app.
Verified hang is fixed, and did sanity checks in fluent test app to make sure nothing else regressed.
Pull request checklist
This PR has considered:
Microsoft Reviewers: Open in CodeFlow