setStatusBarStyle:animated:已弃用

setStatusBarStyle:animated: deprecated

我目前正在 Xcode 8 beta 上为 iOS 10.

开发一个应用程序(在 Swift 3 中)

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

但是,preferredStatusBarStyle 在这里不起作用,因为我想在单个视图控制器中更改它。

谁能想出其他方法来执行此操作?

提前致谢

编辑:

明确地说,我想做的是在视图控制器已经在屏幕上时更改样式。

您可以创建一个 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
}

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

然后,在您 viewController 切换到夜间主题时:

UIApplication.shared.statusBarStyle = .lightContent

要回黑:

UIApplication.shared.statusBarStyle = .default