状态栏 iOS7
Posted
技术标签:
【中文标题】状态栏 iOS7【英文标题】:Status Bar iOS7 【发布时间】:2014-06-02 05:27:49 【问题描述】:我有两个视图,我需要一个能够显示白色状态栏,另一个显示不显示状态栏。我已成功使其显示 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;
【问题讨论】:
你做过setStatusBarHidden:NO
或prefersStatusBarHidden NO
吗?
View controller-based status bar appearance = NO
你的意思是当我用这个的时候? @迈克尔斯
【参考方案1】:
-
您不应该在第一个块中调用 prefersStatusBarHidden,您应该实现它以返回 true。
确保在 Info.plist 文件中将基于视图控制器的状态栏外观 (UIViewControllerBasedStatusBarAppearance) 设置为 yes。
这一切的意思是,在你想要隐藏状态栏的 VC 中,你需要放置:
-(BOOL)prefersStatusBarHidden
return true;
-(UIStatusBarStyle)preferredStatusBarStyle
return UIStatusBarStyleDefault;
在另一个 VC 中,输入:
-(BOOL)prefersStatusBarHidden
return false;
-(UIStatusBarStyle)preferredStatusBarStyle
return UIStatusBarStyleLightContent;
刚刚检查了一下,一切似乎都按预期工作。注意在iOS 7中,UIStatusBarStyle只控制状态栏文字的颜色,背景颜色由导航栏本身决定。
【讨论】:
感谢您的回复。没有prefersStatusBarHidden
,视图不会关闭状态栏
我确实将UIViewControllerBasedStatusBarAppearance
设置为yes,但状态栏不会变白并设置为yes。 @大卫
另外需要注意的是,在iOS 7中,状态栏背景是由导航栏建立的。 UIStatusBarStyle 确定文本颜色。
那我怎么让它变白呢?在故事板中? @大卫
你在使用导航栏吗?【参考方案2】:
为什么状态栏不是白色的!?!
嗯,仅仅是因为它是透明的。状态栏的“背景颜色”现在(在 ios7 之后)是状态栏后面的视图/窗口的颜色。
但无法让主视图具有白色状态栏
我常用的解决方案是强制navigationController的navigationBar在下面呈现状态栏,而不是在后面。这样,navigationBar 的颜色/背景图像不会延伸到状态栏下方,状态栏的“背景颜色”现在是窗口的颜色。
要强制导航栏从状态栏下方开始,请将其 clipsToBounds 属性设置为 YES。
_navigationController.navigationBar.clipsToBounds = YES;
要设置窗口的背景颜色,
self.window.backgroundColor = [UIColor whiteColor];
参考:Ironically, our "solution" was someone else's "bug" :)
【讨论】:
以上是关于状态栏 iOS7的主要内容,如果未能解决你的问题,请参考以下文章