我有两个视图,我需要一个能够显示白色状态栏而另一个显示没有状态栏。我已成功显示NO状态栏,但无法让主视图显示白色状态栏。我必须使用View controller-based status bar appearance = YES
,否则当我从"没有状态栏视图"它使整个应用程序没有状态栏。为什么状态栏不是白色的?!
现状代码,用于推迟状态栏:
-(BOOL)prefersStatusBarHidden
{
return YES;
}
-(void)ViewDidLoad {
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
{
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
else
{
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
}
尝试将状态栏设为白色的当前代码:
- (void)viewDidLoad {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
[self setNeedsStatusBarAppearanceUpdate];
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
答案 0 :(得分:0)
这一切意味着在VC中你想要隐藏状态栏你需要放置:
-(BOOL)prefersStatusBarHidden
{
return true;
}
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
在另一个VC中,放:
-(BOOL)prefersStatusBarHidden
{
return false;
}
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
刚检查出来,一切似乎按预期工作。请注意,在iOS 7中,UIStatusBarStyle仅控制状态栏中文本的颜色,背景颜色由导航栏本身决定。
答案 1 :(得分:0)
为什么状态栏不是白色的??!
嗯,仅仅因为它是透明的。状态栏的“背景颜色”现在(post ios7)状态栏后面的视图/窗口的颜色。
但无法让主视图具有白色状态栏
我经常使用的解决方案是强制navigationController的navigationBar在状态栏下面呈现而不是在后面。这样,navigationBar的颜色/背景图像不会在状态栏下延伸,状态栏的“背景颜色”现在是窗口的颜色。
要强制导航栏在状态栏下方下面,请将其clipsToBounds属性设置为YES。
_navigationController.navigationBar.clipsToBounds = YES;
要设置窗口的背景颜色,
self.window.backgroundColor = [UIColor whiteColor];