diff --git a/packages/core/ui/core/view/view-helper/index.ios.ts b/packages/core/ui/core/view/view-helper/index.ios.ts index 696a7dbbe..b293a0d8c 100644 --- a/packages/core/ui/core/view/view-helper/index.ios.ts +++ b/packages/core/ui/core/view/view-helper/index.ios.ts @@ -59,11 +59,17 @@ class UILayoutViewController extends UIViewController { if (parent) { const parentPageInsetsTop = parent.nativeViewProtected.safeAreaInsets.top; - const currentInsetsTop = this.view.safeAreaInsets.top; - const additionalInsetsTop = Math.max(parentPageInsetsTop - currentInsetsTop, 0); - const parentPageInsetsBottom = parent.nativeViewProtected.safeAreaInsets.bottom; - const currentInsetsBottom = this.view.safeAreaInsets.bottom; + let currentInsetsTop = this.view.safeAreaInsets.top; + let currentInsetsBottom = this.view.safeAreaInsets.bottom; + + // Safe area insets include additional safe area insets too, so subtract old values + if (this.additionalSafeAreaInsets) { + currentInsetsTop -= this.additionalSafeAreaInsets.top; + currentInsetsBottom -= this.additionalSafeAreaInsets.bottom; + } + + const additionalInsetsTop = Math.max(parentPageInsetsTop - currentInsetsTop, 0); const additionalInsetsBottom = Math.max(parentPageInsetsBottom - currentInsetsBottom, 0); if (additionalInsetsTop > 0 || additionalInsetsBottom > 0) { @@ -266,7 +272,7 @@ export class IOSHelper { const adjustedFrame = IOSHelper.getFrameFromPosition(position, insets); if (Trace.isEnabled()) { - Trace.write(`${view} :shrinkToSafeArea: ${JSON.stringify(IOSHelper.getPositionFromFrame(adjustedFrame))}`, Trace.categories.Layout); + Trace.write(`${view} :shrinkToSafeArea: ${JSON.stringify(IOSHelper.getPositionFromFrame(adjustedFrame))}`, Trace.categories.Layout); } return adjustedFrame; diff --git a/packages/core/ui/page/index.ios.ts b/packages/core/ui/page/index.ios.ts index c712718ff..fd5eec0cb 100644 --- a/packages/core/ui/page/index.ios.ts +++ b/packages/core/ui/page/index.ios.ts @@ -279,11 +279,17 @@ class UIViewControllerImpl extends UIViewController { if (frameParent) { const parentPageInsetsTop = frameParent.nativeViewProtected.safeAreaInsets.top; - const currentInsetsTop = this.view.safeAreaInsets.top; - const additionalInsetsTop = Math.max(parentPageInsetsTop - currentInsetsTop, 0); - const parentPageInsetsBottom = frameParent.nativeViewProtected.safeAreaInsets.bottom; - const currentInsetsBottom = this.view.safeAreaInsets.bottom; + let currentInsetsTop = this.view.safeAreaInsets.top; + let currentInsetsBottom = this.view.safeAreaInsets.bottom; + + // Safe area insets include additional safe area insets too, so subtract old values + if (this.additionalSafeAreaInsets) { + currentInsetsTop -= this.additionalSafeAreaInsets.top; + currentInsetsBottom -= this.additionalSafeAreaInsets.bottom; + } + + const additionalInsetsTop = Math.max(parentPageInsetsTop - currentInsetsTop, 0); const additionalInsetsBottom = Math.max(parentPageInsetsBottom - currentInsetsBottom, 0); if (additionalInsetsTop > 0 || additionalInsetsBottom > 0) {