繁体   English   中英

如何在Swift3.0中使用代码控制StatusBar样式

[英]How to control the StatusBar style with code in Swift3.0

我使用的代码:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

然后我添加

<key>UIViewControllerBasedStatusBarAppearance</key><false/>

在Info.plist中。

但是StatusBar仍然是黑色样式! 为什么?

SWIFT 3

UINavigationController重写视图控制器的首选状态栏样式。 您可以通过子类化UINavigationController,将控制权交还给视图控制器:

class BaseNavigationController: UINavigationController {

var statusBarStyle: UIStatusBarStyle?

override var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyle ?? .default
}

然后,您可以在视图控制器中设置statusBarStyle属性:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if let navigationController = navigationController as? BaseNavigationController {
        navigationController.statusBarStyle = preferredStatusBarStyle
    }
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default // any style you want
}

它不起作用,因为您在Info.plist中指定了<key>UIViewControllerBasedStatusBarAppearance</key><false/> 将该键更改为true ,它将起作用。 该键背后的主要思想是,当它为true时,应用程序会在视图控制器代码中查找状态栏样式,以实现preferredStatusBarStyle (用于状态栏样式)和prefersStatusBarHidden (例如,是否应为此视图控制器隐藏状态栏)。 并且,当UIViewControllerBasedStatusBarAppearance键为false时,应用程序将在目标首选项的“ General部分中查找定义的全局设置(在xcode的项目导航器中选择项目文件)。

另外,还必须记住,当视图控制器位于UINavigationControllerUITabbarController类的容器上时,为了更改状态栏的外观,必须扩展这些容器(写扩展名),并重写preferredStatusBarStyle属性。

您也可以在SO上检查答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM