setStatusBarStyle:animated:deprecated

时间:2016-09-11 09:01:05

标签: ios swift statusbar

我目前正在Xcode 8 beta上为iOS 10开发一个应用程序(在Swift 3中)。

我想要实现的是在运行时更改视图控制器中的状态栏样式,以便将主题从白天主题更改为夜间主题。 我发现我过去在开发其他应用时使用的方法已被弃用,如API参考文献here所示。

然而,preferredStatusBarStyle在这里工作不起作用,因为我想在一个视图控制器中更改它。

有人能想到其他方法吗?

提前致谢

修改

要清楚,我想要做的是在视图控制器已经在屏幕上时更改样式。

2 个答案:

答案 0 :(得分:0)

您可以创建一个statusBarStyle变量,当更改时更新状态栏外观。如果您只想让它影响一个控制器,只需在控制器消失或消失时反转效果。

var statusBarStyle: UIStatusBarStyle = .lightContent {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyle
}

上述解决方案将在控制器出现之前覆盖之前控制器的状态栏样式。如果要在控制器出现时更改状态栏样式,请尝试以下操作:

var statusBarStyle: UIStatusBarStyle? {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}

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

override func viewDidAppear(animated: Bool) {

    super.viewDidAppear(animated)

    statusBarStyle = .lightContent
}

答案 1 :(得分:-1)

在info.plist中,添加值为false的UIViewControllerBasedStatusBarAppearance键。

然后,在你的viewController切换到你的夜晚主题时:

UIApplication.shared.statusBarStyle = .lightContent

要回到黑色:

UIApplication.shared.statusBarStyle = .default