Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在导航控制器中时,将忽略视图控制器的首选状态栏样式_Ios_Uikit - Fatal编程技术网

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

Ios 在导航控制器中时,将忽略视图控制器的首选状态栏样式,ios,uikit,Ios,Uikit,我正在编写一个具有多个视图的iOS应用程序。我已经将应用程序设置为使用基于ViewController的状态栏样式,这允许我使用以下代码 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 这和预期的一样 然后我将视图嵌入到导航控制器中,并将BarButtonItem与showSegue连接起来。此后,切换到的视图的ViewController将忽略样式设置,并在导航控制器中显

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
} 
这和预期的一样


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

。将调用导航控制器的preferredStatusBarStyle。请将此选项与您的代码一起尝试:

extension UINavigationController {

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

有一个更简洁的解决方案(由苹果公司推荐):


你能显示你的BarButtonItem代码和segue代码吗没有代码:)我已经通过界面构建(“show”)添加了segue,新的ViewController只有被覆盖的变量。还有什么我可以帮忙的吗?我还通过界面构建器为导航控制器和第二个视图设置了lightContent。但仍然没有人幸运地得到这样的东西。通过实现一个自定义的NavigationController类来覆盖该变量,它可以正常工作。但是您的解决方案更好。谢谢!伟大的解决方案!别忘了添加到info.plist View controller-based状态栏外观=是正确的方法是替代
childForStatusBarStyle
。@Codenator81用于Xcode 10+,Swift 4.2默认情况下是的编译器允许您覆盖扩展以与Objective-C兼容。但它实际上违反了language指令。效果很好,只是在两个州之间似乎没有动画效果…谢谢,这个答案真的对我有帮助。
extension UINavigationController {
    override open var childForStatusBarStyle: UIViewController? {
        return topViewController
    }
}