diff --git a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm index 065a17fb28177f00648a42360b04860c60781043..46cf79ba1bc2932a131e6a687dc0bc74616dd174 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm @@ -81,6 +81,7 @@ class PlatformMessageResponseDarwin : public blink::PlatformMessageResponse { bool _platformSupportsTouchTypes; bool _platformSupportsTouchPressure; bool _platformSupportsTouchOrientationAndTilt; + bool _platformSupportsSafeAreaInsets; BOOL _initialized; BOOL _connected; } @@ -129,6 +130,7 @@ class PlatformMessageResponseDarwin : public blink::PlatformMessageResponse { _platformSupportsTouchTypes = fml::IsPlatformVersionAtLeast(9); _platformSupportsTouchPressure = fml::IsPlatformVersionAtLeast(9); _platformSupportsTouchOrientationAndTilt = fml::IsPlatformVersionAtLeast(9, 1); + _platformSupportsSafeAreaInsets = fml::IsPlatformVersionAtLeast(11, 0); _orientationPreferences = UIInterfaceOrientationMaskAll; _statusBarStyle = UIStatusBarStyleDefault; @@ -619,9 +621,11 @@ static inline blink::PointerData::DeviceKind DeviceKindFromTouchType(UITouch* to } - (void)viewSafeAreaInsetsDidChange { - [self updateViewportPadding]; - [self updateViewportMetrics]; - [super viewSafeAreaInsetsDidChange]; + if (_platformSupportsSafeAreaInsets) { + [self updateViewportPadding]; + [self updateViewportMetrics]; + [super viewSafeAreaInsetsDidChange]; + } } // Updates _viewportMetrics physical padding. @@ -629,11 +633,16 @@ static inline blink::PointerData::DeviceKind DeviceKindFromTouchType(UITouch* to // Viewport padding represents the iOS safe area insets. - (void)updateViewportPadding { CGFloat scale = [UIScreen mainScreen].scale; - if (@available(iOS 11, *)) { + // TODO(cbracken) once clang toolchain compiler-rt has been updated, replace with + // if (@available(iOS 11, *)) { + if (_platformSupportsSafeAreaInsets) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability-new" _viewportMetrics.physical_padding_top = self.view.safeAreaInsets.top * scale; _viewportMetrics.physical_padding_left = self.view.safeAreaInsets.left * scale; _viewportMetrics.physical_padding_right = self.view.safeAreaInsets.right * scale; _viewportMetrics.physical_padding_bottom = self.view.safeAreaInsets.bottom * scale; +#pragma clang diagnostic pop } else { _viewportMetrics.physical_padding_top = [self statusBarPadding] * scale; } @@ -819,8 +828,11 @@ constexpr CGFloat kStandardStatusBarHeight = 20.0; - (void)handleStatusBarTouches:(UIEvent*)event { CGFloat standardStatusBarHeight = kStandardStatusBarHeight; - if (@available(iOS 11, *)) { + if (_platformSupportsSafeAreaInsets) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability-new" standardStatusBarHeight = self.view.safeAreaInsets.top; +#pragma clang diagnostic pop } // If the status bar is double-height, don't handle status bar taps. iOS