From b4433da21b03fe4cb5cbf0b7055d45a8aa4f1b74 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Fri, 6 Sep 2019 13:09:59 +0200 Subject: [PATCH] ui/app: (iOS) use UIView's safeAreaInsets for window insets if available Unlike UIView's layoutMargins, safeAreaInsets only includes the space actually taken up by system UI. Signed-off-by: Elias Naur --- ui/app/os_ios.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/app/os_ios.m b/ui/app/os_ios.m index 6ff0a7ca..4e28134f 100644 --- a/ui/app/os_ios.m +++ b/ui/app/os_ios.m @@ -23,11 +23,12 @@ static void redraw(CFTypeRef viewRef, BOOL sync) { // Use 163 as the standard ppi on iOS. CGFloat dpi = 163*scale; CGFloat sdpi = dpi; + UIEdgeInsets insets = v.layoutMargins; if (@available(iOS 11.0, tvOS 11.0, *)) { UIFontMetrics *metrics = [UIFontMetrics defaultMetrics]; sdpi = [metrics scaledValueForValue:sdpi]; + insets = v.safeAreaInsets; } - UIEdgeInsets insets = v.layoutMargins; onDraw(viewRef, dpi, sdpi, v.bounds.size.width*scale, v.bounds.size.height*scale, sync, insets.top*scale, insets.right*scale, insets.bottom*scale, insets.left*scale); } @@ -71,6 +72,7 @@ CGFloat _keyboardHeight; - (void)loadView { CGRect zeroFrame = CGRectMake(0, 0, 0, 0); self.view = [[UIView alloc] initWithFrame:zeroFrame]; + self.view.layoutMargins = UIEdgeInsetsMake(0, 0, 0, 0); UIView *drawView = [[GioView alloc] initWithFrame:zeroFrame]; [self.view addSubview: drawView]; #ifndef TARGET_OS_TV