From 760bbd06faf3acb7e0694acaf1ad3e029f1cd278 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Tue, 3 Jan 2023 13:23:32 -0300 Subject: [PATCH] fix(ios): prevent layout in viewSafeAreaInsetsDidChange until first viewDidLayoutSubviews (#10151) --- packages/core/ui/page/index.ios.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/core/ui/page/index.ios.ts b/packages/core/ui/page/index.ios.ts index b8ff65664..d6bc16367 100644 --- a/packages/core/ui/page/index.ios.ts +++ b/packages/core/ui/page/index.ios.ts @@ -74,6 +74,7 @@ class UIViewControllerImpl extends UIViewController { public isBackstackSkipped: boolean; public isBackstackCleared: boolean; + private didFirstLayout: boolean; // this is initialized in initWithOwner since the constructor doesn't run on native classes private _isRunningLayout: number; private get isRunningLayout() { @@ -84,6 +85,7 @@ class UIViewControllerImpl extends UIViewController { } private finishRunningLayout() { this._isRunningLayout--; + this.didFirstLayout = true; } private runLayout(cb: () => void) { try { @@ -98,6 +100,7 @@ class UIViewControllerImpl extends UIViewController { const controller = UIViewControllerImpl.new(); controller._owner = owner; controller._isRunningLayout = 0; + controller.didFirstLayout = false; return controller; } @@ -125,7 +128,7 @@ class UIViewControllerImpl extends UIViewController { const isBack = isBackNavigationTo(owner, newEntry); owner.onNavigatingTo(newEntry.entry.context, isBack, newEntry.entry.bindingContext); } - + if (frame) { if (!owner.parent) { owner._frame = frame; @@ -276,7 +279,7 @@ class UIViewControllerImpl extends UIViewController { public viewSafeAreaInsetsDidChange(): void { super.viewSafeAreaInsetsDidChange(); - if (this.isRunningLayout) { + if (this.isRunningLayout || !this.didFirstLayout) { return; } const owner = this._owner?.deref();