Objective c 如何以编程方式更改PreferredStatusBarStyle

Objective c 如何以编程方式更改PreferredStatusBarStyle,objective-c,ios7,statusbar,uistatusbar,Objective C,Ios7,Statusbar,Uistatusbar,我想通过按按钮将状态栏的颜色从白色更改为黑色,仅在单个ViewController中以编程方式进行 代码如下: - (UIStatusBarStyle)preferredStatusBarStyle { NSLog(@"PreferredStatusBarStyle"); if(nav_bar.alpha==1) { NSLog(@"->UIStatusBarStyleBlackOpaque"); return UIStatusBar

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

代码如下:

- (UIStatusBarStyle)preferredStatusBarStyle {
    NSLog(@"PreferredStatusBarStyle");
    if(nav_bar.alpha==1)
    {
        NSLog(@"->UIStatusBarStyleBlackOpaque");
        return UIStatusBarStyleBlackOpaque;
    }
    else
    {
        NSLog(@"->UIStatusBarStyleLightContent");
        return UIStatusBarStyleLightContent;
    }}
当我按下按钮时,动作是:

[self setNeedsStatusBarAppearanceUpdate];
但是这不起作用


当我按下log按钮时,根据navbar.alpha写入正确的状态,但是StatusBarStyleBlack文本颜色保持UIStatusBarStyleBlack不透明,就像视图出现时一样。

您需要做的是通过共享应用程序调用-setStatusBarStyle:animated:方法,如下所示

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
也可以在不使用动画参数的情况下使用它。请记住,iOS 7中不推荐使用UIStatusBarStyleBlack不透明,文档中说您想改用UIStatusBarStyleLightContent

编辑:
很抱歉,如果您想使用preferredStatusBarStyle,请查看此

setStatusBarStyle:animated:
已被弃用。在iOS9中,您可以使用
preferredStatusBarStyle
setNeedsStatusBarAppearanceUpdate
实现同样的功能

在视图控制器中:

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

    return .Default
}
然后当你的情况改变时:

self.setNeedsStatusBarAppearanceUpdate()
在Swift 4上:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

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

[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent动画:是];这在iOS 9中已被弃用。其他解决方案?@Arcrammer我已经回答了上面的问题,必须调用[self-setNeedsStatusBarAppearanceUpdate];然后-(UIStatusBarStyle)preferredStatusBarStyle{NSLog(@“preferredStatusBarStyle”);如果(nav_bar.alpha==1){}不要忘记调用setNeedsStatusBarAppearanceUpdate()