如何以编程方式更改PreferredStatusBarStyle

时间:2013-12-12 15:56:25

标签: objective-c ios7 statusbar uistatusbar

我想通过按下按钮将状态栏的颜色从白色更改为黑色,以编程方式仅在单个ViewController中

这是代码:

- (UIStatusBarStyle)preferredStatusBarStyle {
    NSLog(@"PreferredStatusBarStyle");
    if(nav_bar.alpha==1)
    {
        NSLog(@"->UIStatusBarStyleBlackOpaque");
        return UIStatusBarStyleBlackOpaque;
    }
    else
    {
        NSLog(@"->UIStatusBarStyleLightContent");
        return UIStatusBarStyleLightContent;
    }}

然后当我按下按钮动作时:

[self setNeedsStatusBarAppearanceUpdate];

这不起作用!

当我按下按钮日志时,根据navbar.alpha写出正确的状态,但状态栏文本颜色仍然是UIStatusBarStyleBlackOpaque,就像出现视图一样。

3 个答案:

答案 0 :(得分:8)

setStatusBarStyle:animated:已被弃用。在iOS9中,您可以使用preferredStatusBarStylesetNeedsStatusBarAppearanceUpdate实现相同的目标。

在视图控制器中:

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

    return .Default
}

然后当你的病情发生变化时:

self.setNeedsStatusBarAppearanceUpdate()

答案 1 :(得分:4)

在Swift 4上:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

希望能帮助其他人找到这篇文章。

答案 2 :(得分:0)

你需要做的是通过共享应用程序调用-setStatusBarStyle:animated:方法,就像这样

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

您也可以在没有动画参数的情况下使用它。请记住,iOS 7中不推荐使用UIStatusBarStyleBlackOpaque,文档说您想要使用UIStatusBarStyleLightContent

编辑: 抱歉,如果您想使用preferredStatusBarStyle,请查看此preferredStatusBarStyle isn't called