swift ios试图在某些VC上改变状态栏的颜色

时间:2016-07-23 22:00:37

标签: ios swift uinavigationcontroller statusbar

在我的应用程序中,我有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之间切换,状态栏上面的代码都会先变为黑色,这是正确的,但是当它进入另一个ViewController时它会再次变为白色。

如何在某些ViewController上保持状态栏为白色?

2 个答案:

答案 0 :(得分:0)

尝试在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

答案 1 :(得分:0)

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

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

    UIApplication.sharedApplication().statusBarStyle = .LightContent
}

删除:

self

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