From f60546cadb24f9e06e82ad0e5358e73c4871c0d9 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Thu, 19 Feb 2026 10:01:31 -0800 Subject: [PATCH] fix(ios): statusBarStyle default handling and explicit control --- packages/core/ui/core/view/index.ios.ts | 20 ------------------- .../ui/core/view/view-helper/index.ios.ts | 9 ++++----- packages/core/ui/page/index.ios.ts | 18 +++-------------- 3 files changed, 7 insertions(+), 40 deletions(-) diff --git a/packages/core/ui/core/view/index.ios.ts b/packages/core/ui/core/view/index.ios.ts index 4ca8c538de..a88ccaf8dc 100644 --- a/packages/core/ui/core/view/index.ios.ts +++ b/packages/core/ui/core/view/index.ios.ts @@ -978,28 +978,8 @@ export class View extends ViewCommon { } updateStatusBarStyle(value: 'dark' | 'light') { - // Keep UINavigationBar style aligned (affects legacy + some container defaults). - const parent = this.parent; - const ctrl = parent?.ios?.controller; - if (ctrl && ctrl instanceof UINavigationController) { - const navigationBar = ctrl.navigationBar; - if (navigationBar) { - navigationBar.barStyle = value === 'light' ? UIBarStyle.Black : UIBarStyle.Default; - } - } - // iOS requires a controller invalidation to re-evaluate `preferredStatusBarStyle`. const ownerController = this.viewController || IOSHelper.getParentWithViewController(this as any)?.viewController; - - // Force overrideUserInterfaceStyle if available (iOS 13+) to ensure status bar contrast. - if (SDK_VERSION >= 13 && ownerController) { - const style = value === 'light' ? UIUserInterfaceStyle.Dark : UIUserInterfaceStyle.Light; - ownerController.overrideUserInterfaceStyle = style; - if (ctrl && ctrl instanceof UINavigationController) { - ctrl.overrideUserInterfaceStyle = style; - } - } - IOSHelper.invalidateStatusBarAppearance(ownerController, `View.updateStatusBarStyle:${value}`); } 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 66672038ab..f475496feb 100644 --- a/packages/core/ui/core/view/view-helper/index.ios.ts +++ b/packages/core/ui/core/view/view-helper/index.ios.ts @@ -151,15 +151,14 @@ class UILayoutViewController extends UIViewController { // @ts-ignore public get preferredStatusBarStyle(): UIStatusBarStyle { const owner = this.owner?.deref(); - if (owner) { + if (owner?.statusBarStyle) { if (SDK_VERSION >= 13) { - return owner.statusBarStyle === 'dark' ? UIStatusBarStyle.DarkContent : UIStatusBarStyle.LightContent; + return owner.statusBarStyle === 'light' ? UIStatusBarStyle.LightContent : UIStatusBarStyle.DarkContent; } else { - return owner.statusBarStyle === 'dark' ? UIStatusBarStyle.LightContent : UIStatusBarStyle.Default; + return owner.statusBarStyle === 'light' ? UIStatusBarStyle.LightContent : UIStatusBarStyle.Default; } - } else { - return UIStatusBarStyle.Default; } + return UIStatusBarStyle.Default; } } diff --git a/packages/core/ui/page/index.ios.ts b/packages/core/ui/page/index.ios.ts index 16959bbffc..36ccdd67bc 100644 --- a/packages/core/ui/page/index.ios.ts +++ b/packages/core/ui/page/index.ios.ts @@ -359,15 +359,14 @@ class UIViewControllerImpl extends UIViewController { // @ts-ignore public get preferredStatusBarStyle(): UIStatusBarStyle { const owner = this._owner?.deref(); - if (owner) { + if (owner?.statusBarStyle) { if (SDK_VERSION >= 13) { return owner.statusBarStyle === 'light' ? UIStatusBarStyle.LightContent : UIStatusBarStyle.DarkContent; } else { - return owner.statusBarStyle === 'dark' ? UIStatusBarStyle.LightContent : UIStatusBarStyle.Default; + return owner.statusBarStyle === 'light' ? UIStatusBarStyle.LightContent : UIStatusBarStyle.Default; } - } else { - return UIStatusBarStyle.Default; } + return UIStatusBarStyle.Default; } } @@ -457,17 +456,6 @@ export class Page extends PageBase { const frame = this.frame; if (frame?.ios && value) { const navigationController: UINavigationController = frame.ios.controller; - const navigationBar = navigationController.navigationBar; - - navigationBar.barStyle = value === 'light' ? UIBarStyle.Black : UIBarStyle.Default; - - // Force overrideUserInterfaceStyle on the navigation controller as well - if (SDK_VERSION >= 13) { - const style = value === 'light' ? UIUserInterfaceStyle.Dark : UIUserInterfaceStyle.Light; - navigationController.overrideUserInterfaceStyle = style; - navigationBar.overrideUserInterfaceStyle = style; - } - IOSHelper.invalidateStatusBarAppearance(navigationController, `Page._updateStatusBarStyle:${value}`); } }