Skip to content

Commit be6efc3

Browse files
authored
fix(ios): additional safe area insets were miscalculated if already set (#9991)
1 parent de1d47d commit be6efc3

2 files changed

Lines changed: 21 additions & 9 deletions

File tree

‎packages/core/ui/core/view/view-helper/index.ios.ts‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,17 @@ class UILayoutViewController extends UIViewController {
5959

6060
if (parent) {
6161
const parentPageInsetsTop = parent.nativeViewProtected.safeAreaInsets.top;
62-
const currentInsetsTop = this.view.safeAreaInsets.top;
63-
const additionalInsetsTop = Math.max(parentPageInsetsTop - currentInsetsTop, 0);
64-
6562
const parentPageInsetsBottom = parent.nativeViewProtected.safeAreaInsets.bottom;
66-
const currentInsetsBottom = this.view.safeAreaInsets.bottom;
63+
let currentInsetsTop = this.view.safeAreaInsets.top;
64+
let currentInsetsBottom = this.view.safeAreaInsets.bottom;
65+
66+
// Safe area insets include additional safe area insets too, so subtract old values
67+
if (this.additionalSafeAreaInsets) {
68+
currentInsetsTop -= this.additionalSafeAreaInsets.top;
69+
currentInsetsBottom -= this.additionalSafeAreaInsets.bottom;
70+
}
71+
72+
const additionalInsetsTop = Math.max(parentPageInsetsTop - currentInsetsTop, 0);
6773
const additionalInsetsBottom = Math.max(parentPageInsetsBottom - currentInsetsBottom, 0);
6874

6975
if (additionalInsetsTop > 0 || additionalInsetsBottom > 0) {
@@ -266,7 +272,7 @@ export class IOSHelper {
266272
const adjustedFrame = IOSHelper.getFrameFromPosition(position, insets);
267273

268274
if (Trace.isEnabled()) {
269-
Trace.write(`${view} :shrinkToSafeArea: ${JSON.stringify(IOSHelper.getPositionFromFrame(adjustedFrame))}`, Trace.categories.Layout);
275+
Trace.write(`${view} :shrinkToSafeArea: ${JSON.stringify(IOSHelper.getPositionFromFrame(adjustedFrame))}`, Trace.categories.Layout);
270276
}
271277

272278
return adjustedFrame;

‎packages/core/ui/page/index.ios.ts‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,17 @@ class UIViewControllerImpl extends UIViewController {
279279

280280
if (frameParent) {
281281
const parentPageInsetsTop = frameParent.nativeViewProtected.safeAreaInsets.top;
282-
const currentInsetsTop = this.view.safeAreaInsets.top;
283-
const additionalInsetsTop = Math.max(parentPageInsetsTop - currentInsetsTop, 0);
284-
285282
const parentPageInsetsBottom = frameParent.nativeViewProtected.safeAreaInsets.bottom;
286-
const currentInsetsBottom = this.view.safeAreaInsets.bottom;
283+
let currentInsetsTop = this.view.safeAreaInsets.top;
284+
let currentInsetsBottom = this.view.safeAreaInsets.bottom;
285+
286+
// Safe area insets include additional safe area insets too, so subtract old values
287+
if (this.additionalSafeAreaInsets) {
288+
currentInsetsTop -= this.additionalSafeAreaInsets.top;
289+
currentInsetsBottom -= this.additionalSafeAreaInsets.bottom;
290+
}
291+
292+
const additionalInsetsTop = Math.max(parentPageInsetsTop - currentInsetsTop, 0);
287293
const additionalInsetsBottom = Math.max(parentPageInsetsBottom - currentInsetsBottom, 0);
288294

289295
if (additionalInsetsTop > 0 || additionalInsetsBottom > 0) {

0 commit comments

Comments
 (0)