swift ios 尝试更改某些 VC 的状态栏颜色

swift ios trying to change color of status bar on certain VC's

在我的应用程序中,我有 4 个 ViewController,其中两个我正在将状态栏从白色更改为黑色,如下所示:

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
    }

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)

        UIApplication.sharedApplication().statusBarStyle = .LightContent
    }

问题是,如果我在两个 ViewController 之间切换,两者都有状态栏上方的代码,将首先变为黑色,这是正确的,但当输入另一个 [=20] 时,它又变为白色=].

如何让某些 ViewController 的状态栏保持白色?

尝试在您的 VC 中添加以下方法。使用 .default 或 .lightContent 更改状态栏颜色。我使用 Xcode 8 和 swift 3 进行了测试:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.default;
}

我使用 Xcode 7.3.1 和 swift 2.3 创建了一个新的选项卡式应用程序。我有两个带有 类 关联的 FirstViewController 和 SecondViewController 的选项卡。在 FirstViewController 中,我添加了以下方法:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.Default;
}

然后在 SecondViewController 中,我将背景更改为黑色并添加了以下方法:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent;
}

最后,我在 FirstViewController 中添加了两个按钮。一个按钮以模态方式呈现控制器,另一个按钮通过推送呈现。当我以模态方式呈现视图时 'preferredStatusBarStyle' 工作但是当我通过推送呈现时我需要添加以下代码行:

self.navigationController?.navigationBar.barStyle = .Black

如果您真的不想覆盖 preferredStatusBarStyle 的委托方法,您仍然可以使用:

UIApplication.sharedApplication().statusBarStyle = .LightContent

删除:

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)

    UIApplication.sharedApplication().statusBarStyle = .LightContent
}

让状态栏由 viewWillAppear 中发生的事情设置。显然这更容易出错,但如果你的导航是相对线性的那么这将是最简单的解决方案