我想通过按下按钮将状态栏的颜色从白色更改为黑色,以编程方式仅在单个ViewController中
这是代码:
- (UIStatusBarStyle)preferredStatusBarStyle {
NSLog(@"PreferredStatusBarStyle");
if(nav_bar.alpha==1)
{
NSLog(@"->UIStatusBarStyleBlackOpaque");
return UIStatusBarStyleBlackOpaque;
}
else
{
NSLog(@"->UIStatusBarStyleLightContent");
return UIStatusBarStyleLightContent;
}}
然后当我按下按钮动作时:
[self setNeedsStatusBarAppearanceUpdate];
但这不起作用!
当我按下按钮日志时,根据navbar.alpha写出正确的状态,但状态栏文本颜色仍然是UIStatusBarStyleBlackOpaque,就像出现视图一样。
答案 0 :(得分:8)
setStatusBarStyle:animated:
已被弃用。在iOS9中,您可以使用preferredStatusBarStyle
和setNeedsStatusBarAppearanceUpdate
实现相同的目标。
在视图控制器中:
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