Objective c 如何以编程方式更改PreferredStatusBarStyle
我想通过按按钮将状态栏的颜色从白色更改为黑色,仅在单个ViewController中以编程方式进行 代码如下: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
- (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()