【问题标题】:setStatusBarStyle:animated: deprecatedsetStatusBarStyle:动画:已弃用
【发布时间】:2016-09-11 09:01:04
【问题描述】:

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

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

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

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

提前致谢

编辑:

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

【问题讨论】:

    标签: ios swift statusbar


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助,但我想做的是在视图控制器已经呈现后更改状态栏样式。有什么办法可以做到吗?
    • 您可以在控制器的 viewDidAppear 方法中更改 statusBarStyle 变量。
    • 我认为您误解了我的问题。我在问是否可以在视图已经出现在屏幕上之后更改样式。例如,状态栏现在是默认样式,当我按下按钮时,它应该变成 lightContent。有什么建议吗?
    • 好的,你有一个已经在屏幕上的视图控制器,你想在按下按钮时更改状态栏的样式?
    • 是的,你是对的。我这样做是为了改变主题。
    【解决方案2】:

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

    然后,在你的 viewController 中切换到你的夜间主题:

    UIApplication.shared.statusBarStyle = .lightContent
    

    回到黑色:

    UIApplication.shared.statusBarStyle = .default
    

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 2018-02-11
      • 1970-01-01
      • 2014-02-12
      • 2021-11-12
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 2014-03-16
      相关资源
      最近更新 更多