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

时间:2017-03-09 12:43:16

标签: ios swift3

我使用代码:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

我添加

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

在Info.plist中。

但StatusBar仍然是黑色风格!为什么呢?

2 个答案:

答案 0 :(得分:2)

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
}

答案 1 :(得分:1)

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

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

您也可以在SO上查看this回答。