【发布时间】:2020-04-21 23:26:31
【问题描述】:
我的应用程序中有多个UITabBar,有些ViewController 有白色状态栏,有些ViewController 有黑色状态栏。
我的info.plist
View controller-based status bar appearance 到 YES
我的 Viewcontroller 有以下代码。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default //or return . lightContent
}
但preferredStatusBarStyle 永远不会被调用。
我还在我的控制器viewDidLoad 中写了下面的行,但上面仍然没有被调用。
self.setNeedsStatusBarAppearanceUpdate()
我也已将controller-based status bar appearance 更改为YES && NO 多次检查,但对我没有任何帮助。
我也尝试了以下解决方案和其他 stackoverflow 答案,但没有任何帮助。
preferredStatusBarStyle not respecting on iOS 13
preferredStatusBarStyle var not working in iOS12?
编辑
我尝试了下面的代码,它返回了topViewController,它将调用preferredStatusBarStyle 的ViewController
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return topViewController
}
}
所以一旦topViewController 找到它就会调用那个特定ViewController 的preferredStatusBarStyle。
但问题是它没有在 UITabBarController -> UINavigationController -> UIViewController 内部被调用。
要求
我有 2 个不同的TabBarController。
第一个TabBarController statusBarStyle 是.lightContent。
第二个TabBarController statusBarStyle 是.lightContent 和.default 在不同的控制器中。
当我更改为第二个 TabBarController 时,它将调用第二个 TabBarController 的 preferredStatusBarStyle 和所有 ViewController statusBarStyle 去 .default 但我的一些控制器 statusBarStyle 想要成为 .ligthContent
我怎样才能做到这一点?
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
我仍然使用 UIApplication.shared.statusBarStyle 虽然它已被弃用,但它仍然可以正常工作,在 viewWillAppear 中调用它
-
@AlexandrKolesnik,好吧,让我试试吧。
-
@AlexandrKolesnik,我的流程是这样的。
TabBarController-->NavigationController-->ViewController. -
@AlexandrKolesnik,我把上面的行放在
ViewControllerviewWillAppear然后适当的状态栏样式显示1秒钟,然后它会自动转到.light。 -
从 plist 中删除
controller-based status bar appearance在 viewWillAppear 中调用UIApplication.shared.statusBarStyle = .default setNeedsStatusBarAppearanceUpdate()