状态栏 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:NOprefersStatusBarHidden 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的主要内容,如果未能解决你的问题,请参考以下文章

iOS7状态栏问题

iOS7隐藏状态栏

IOS7中的状态栏和导航栏问题

隐藏状态栏时,我的导航栏在 iOS7 中向上移动

如何匹配导航栏与状态栏ios7

iOS7 状态栏就像原生天气应用