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

Kev*_*ein 16 uikit ios

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
} 
Run Code Online (Sandbox Code Playgroud)

这有点像预期的那样.

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

小智 65

当你在一个不会被调用的导航控制器中时.将调用导航控制器的preferredStatusBarStyle.试试这个以及你的代码:

extension UINavigationController {

   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}
Run Code Online (Sandbox Code Playgroud)


joe*_*ern 9

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

extension UINavigationController {
    override open var childForStatusBarStyle: UIViewController? {
        return topViewController
    }
}
Run Code Online (Sandbox Code Playgroud)