设置statusbarStyle(在iOS 9.0中不推荐使用)

时间:2018-06-05 06:42:43

标签: ios swift xcode

刚刚下载了新的xCode 10.0,并且发现自iOS 9.0以来旧的statusBarStyle已被弃用。

警告: Setter for 'statusBarStyle' was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]

弃用代码: UIApplication.shared.statusBarStyle = .default

我尝试使用self.preferredStatusBarStyle,但发现该属性只是一个吸气剂。所以任何人都知道如何设置statusBarStyle


修改

我想在一个函数中更改statusBarStyle,用户可以在不同的主题之间切换。例如:

func changeStatusBar(toDarkMode: Bool) {
    if toDarkMode {
        // Set to light statusBarStyle
    } else { 
        // Set to default
    }
}

6 个答案:

答案 0 :(得分:28)

View controller-based status bar appearance NO中添加Info.plist

然后在“部署信息”中的状态栏样式中选择“亮”

enter image description here

答案 1 :(得分:22)

swift4 中,您可以在viewDidLoad()中使用此ViewController下方的代码块 -

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

答案 2 :(得分:22)

使用您现在使用的相同代码设置darkMode变量,然后在系统预期的计算变量中使用它:

var darkMode = false
override var preferredStatusBarStyle : UIStatusBarStyle {
    return darkMode ? .default : .lightContent
}

根据上下文,您可能需要强制刷新屏幕才能使其生效。你可以通过以下电话来做到这一点:

setNeedsStatusBarAppearanceUpdate()

答案 3 :(得分:8)

如果您使用UINavigationController,还可能需要使用以下代码:

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

原因是setNeedsStatusBarAppearanceUpdate()没有称呼孩子preferredStatusBarStyle

答案 4 :(得分:5)

没有其他建议对我有用。我最终通过以下方式使它起作用:

  1. 设置:

    override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }
    
  2. 致电:

    setNeedsStatusBarAppearanceUpdate()
    

答案 5 :(得分:0)

我的解决方案是这样的: 从导航控制器进行扩展:

extension UINavigationController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
        if let topViewController = presentedViewController{
            return topViewController.preferredStatusBarStyle
        }
        if let topViewController = viewControllers.last {
            return topViewController.preferredStatusBarStyle
        }

        return .default
    }
}

并且如果您的viewController的样式将不同于应用程序的样式,则可以使它

var barStyle = UIStatusBarStyle.lightContent
override var preferredStatusBarStyle: UIStatusBarStyle{
    return barStyle
}

让我们说您的应用状态样式为.default,而您希望此屏幕为.lightContent 因此barStyle将采用.lightContent作为其默认值,这会将状态栏样式更改为lightContent,然后确保当viewWillDisappear再次将barStyle更改为应用程序状态栏样式时,本例中为.default

这对我有用