如何使用Swift3.0中的代码来控制状态栏样式



我使用代码:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

我添加

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

in info.plist。

但是现状栏仍然是黑色样式!为什么?

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,它将起作用。该关键背后的主要思想是,当它是真实的时,应用程序在您的视图控制器代码中查看状态栏样式,以实现preferredStatusBarStyle(用于状态栏样式)和prefersStatusBarHidden(如果它应该隐藏此视图控制器的状态栏)。并且,当UIViewControllerBasedStatusBarAppearance密钥为false时,应用程序会查找目标首选项的General部分中定义的全局设置(在Xcode中选择项目文件中的项目文件)。

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

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

最新更新