mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
fix(ios): ensure view layout when using large titles (#10044)
Co-authored-by: Nathan Walker <walkerrunpdx@gmail.com>
This commit is contained in:
committed by
Nathan Walker
parent
8094cf207a
commit
0552a3a722
@@ -74,6 +74,24 @@ class UIViewControllerImpl extends UIViewController {
|
|||||||
|
|
||||||
public isBackstackSkipped: boolean;
|
public isBackstackSkipped: boolean;
|
||||||
public isBackstackCleared: boolean;
|
public isBackstackCleared: boolean;
|
||||||
|
private _isRunningLayout = 0;
|
||||||
|
private get isRunningLayout() {
|
||||||
|
return this._isRunningLayout === 0;
|
||||||
|
}
|
||||||
|
private startRunningLayout() {
|
||||||
|
this._isRunningLayout++;
|
||||||
|
}
|
||||||
|
private finishRunningLayout() {
|
||||||
|
this._isRunningLayout--;
|
||||||
|
}
|
||||||
|
private runLayout(cb: () => void) {
|
||||||
|
try {
|
||||||
|
this.startRunningLayout();
|
||||||
|
cb();
|
||||||
|
} finally {
|
||||||
|
this.finishRunningLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static initWithOwner(owner: WeakRef<Page>): UIViewControllerImpl {
|
public static initWithOwner(owner: WeakRef<Page>): UIViewControllerImpl {
|
||||||
const controller = <UIViewControllerImpl>UIViewControllerImpl.new();
|
const controller = <UIViewControllerImpl>UIViewControllerImpl.new();
|
||||||
@@ -254,7 +272,19 @@ class UIViewControllerImpl extends UIViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public viewSafeAreaInsetsDidChange(): void {
|
||||||
|
super.viewSafeAreaInsetsDidChange();
|
||||||
|
if (this.isRunningLayout) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const owner = this._owner.get();
|
||||||
|
if (owner) {
|
||||||
|
this.runLayout(() => IOSHelper.layoutView(this, owner));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public viewDidLayoutSubviews(): void {
|
public viewDidLayoutSubviews(): void {
|
||||||
|
this.startRunningLayout();
|
||||||
super.viewDidLayoutSubviews();
|
super.viewDidLayoutSubviews();
|
||||||
const owner = this._owner.get();
|
const owner = this._owner.get();
|
||||||
if (owner) {
|
if (owner) {
|
||||||
@@ -306,6 +336,7 @@ class UIViewControllerImpl extends UIViewController {
|
|||||||
|
|
||||||
IOSHelper.layoutView(this, owner);
|
IOSHelper.layoutView(this, owner);
|
||||||
}
|
}
|
||||||
|
this.finishRunningLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mind implementation for other controllerss
|
// Mind implementation for other controllerss
|
||||||
@@ -407,7 +438,7 @@ export class Page extends PageBase {
|
|||||||
updateWithWillAppear(animated: boolean) {
|
updateWithWillAppear(animated: boolean) {
|
||||||
// this method is important because it allows plugins to react to modal page close
|
// this method is important because it allows plugins to react to modal page close
|
||||||
// for example allowing updating status bar background color
|
// for example allowing updating status bar background color
|
||||||
if (this.hasActionBar) {
|
if (this.hasActionBar) {
|
||||||
this.actionBar.update();
|
this.actionBar.update();
|
||||||
}
|
}
|
||||||
this.updateStatusBar();
|
this.updateStatusBar();
|
||||||
|
|||||||
Reference in New Issue
Block a user