Fix race condition that could cause safe area insets to be missing

This commit is contained in:
Cameron Gutman
2019-09-01 12:26:39 -07:00
parent de2a5d3cd7
commit 56691791b8

View File

@@ -14,7 +14,6 @@
@implementation SettingsViewController { @implementation SettingsViewController {
NSInteger _bitrate; NSInteger _bitrate;
Boolean _adjustedForSafeArea;
} }
@dynamic overrideUserInterfaceStyle; @dynamic overrideUserInterfaceStyle;
@@ -89,21 +88,21 @@ static const int bitrateTable[] = {
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width,
highestViewY + 20); highestViewY + 20);
} }
}
// Adjust the subviews for the safe area on the iPhone X. // Adjust the subviews for the safe area on the iPhone X.
if (!_adjustedForSafeArea) { - (void)viewSafeAreaInsetsDidChange {
if (@available(iOS 11.0, *)) { [super viewSafeAreaInsetsDidChange];
for (UIView* view in self.view.subviews) {
// HACK: The official safe area is much too large for our purposes if (@available(iOS 11.0, *)) {
// so we'll just use the presence of any safe area to indicate we should for (UIView* view in self.view.subviews) {
// pad by 20. // HACK: The official safe area is much too large for our purposes
if (self.view.safeAreaInsets.left >= 20 || self.view.safeAreaInsets.right >= 20) { // so we'll just use the presence of any safe area to indicate we should
view.frame = CGRectMake(view.frame.origin.x + 20, view.frame.origin.y, view.frame.size.width, view.frame.size.height); // pad by 20.
} if (self.view.safeAreaInsets.left >= 20 || self.view.safeAreaInsets.right >= 20) {
view.frame = CGRectMake(view.frame.origin.x + 20, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
} }
} }
_adjustedForSafeArea = true;
} }
} }