在导航控制器中,将忽略视图控制器的首选状态栏样式

时间:2016-12-07 20:12:48

标签: ios uikit

我正在编写一个包含多个视图的iOS应用。我已经将App设置为使用基于ViewController的状态栏样式,这允许我使用以下代码

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
} 

这很有效。

但后来我在导航控制器中嵌入了视图,并将BarButtonItem与showSegue连接起来。从那时起,视图的ViewController切换为忽略样式设置并显示默认的黑色状态栏。

2 个答案:

答案 0 :(得分:55)

当您进入无法调用的导航控制器时。将调用导航控制器的preferredStatusBarStyle。请尝试使用您的代码:

extension UINavigationController {

   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

答案 1 :(得分:0)

有一个更简洁的解决方案(Apple推荐):

extension UINavigationController {
    override open var childForStatusBarStyle: UIViewController? {
        return topViewController
    }
}