【发布时间】:2018-09-19 08:15:17
【问题描述】:
我可以通过在 Info.plist 中将Status bar is initially hidden 设置为YES 来隐藏启动屏幕上的状态栏,然后我想在我的第一个具有.lightContent 样式的视图控制器上显示它。
但是 UIApplication.shared.statusBarStyle = .lightContent 自 iOS 9 以来已被弃用(所以我不想使用它)并且使用以下代码在我的第一个视图控制器上给我一个黑色状态栏。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
如何在我的第一个视图控制器加载时更改状态栏样式?
我正在尝试寻找像UIApplication.shared.statusBarStyle = .lightContent 这样的全局解决方案,因为我真的不想为每个视图控制器设置状态栏样式。
我已经测试了将View controller-based status bar appearance 设置为YES 和NO 的解决方案。
【问题讨论】:
-
已经尝试了所有解决方案,但我的状态栏保持黑色,我不想使用已弃用的解决方案。我也不确定“hack”解决方案是否好用。
-
您的第一个视图控制器是否嵌套在 UINavigationController 中?众所周知,UINavgationController 不会向其 childController 询问
preferredStatusBarStyle属性 -
@adrgrondin 在我的脑海中,一种方法是继承
UINavigationController并覆盖其preferredStatusBarStyle属性以委托给topViewController。这不是最优雅的解决方案,但我现在能想到的唯一一个。 -
@Frederik 是正确的。只是要补充一点,您不需要子类
UINavigationController来实现这一点;您可以向UINavigationController添加一个扩展名,它会覆盖prefersStatusBarHidden和preferredStatusBarStyle。这应该可以正常工作(只要您在 info.plist 中将View controller-based status bar appearance设置为YES)。