ios - setStatusBarStyle :animated: deprecated

标签 ios swift statusbar

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

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

但是,preferredStatusBarStyle 在这里不起作用,因为我想在单个 View Controller 中更改它。

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

提前致谢

编辑:

明确地说,我想做的是在 View Controller 已经在屏幕上时更改样式。

最佳答案

您可以创建一个 statusBarStyle 变量,该变量在更改时更新状态栏外观。如果您只希望它影响一个 Controller ,只需在 Controller 消失或确实消失时反转效果即可。

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyle
}

上述解决方案会在 Controller 出现之前覆盖之前 Controller 的状态栏样式。如果您想在 Controller 出现时更改状态栏样式,请尝试以下操作:

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

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

override func viewDidAppear(animated: Bool) {

    super.viewDidAppear(animated)

    statusBarStyle = .lightContent
}

关于ios - setStatusBarStyle :animated: deprecated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39434477/

相关文章:

ios - 自定义 UITableViewCell 中的按钮 Segue

c++ - Qt 在状态栏中显示不断更新的百分比

ios - 如何从iOS中为for循环创建的所有文本字段中获取文本

ios - Phonegap 在 IOS 后台使用地理定位

ios - 意外发现 nil 但我可以打印该值

android - 从通知中获取数据

android - 在 Kitkat 上使用 Tint 的状态栏半透明

ios - UICollectionViewHeader 中的 UIButton 不起作用

ios - 带有 TableView 的导航 Controller

ios - defer 语句的不同行为