状态栏iOS7

时间:2014-04-17 19:19:47

标签: ios ios7 statusbar

我有两个视图,我需要一个能够显示白色状态栏而另一个显示没有状态栏。我已成功显示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;
}

2 个答案:

答案 0 :(得分:0)

  1. 您不应该在第一个块中调用prefersStatusBarHidden,您应该实现它以返回true。
  2. 确保在Info.plist文件中将基于视图控制器的状态栏外观(UIViewControllerBasedStatusBarAppearance)设置为yes。
  3. 这一切意味着在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];


参考:Ironically, our "solution" was someone else's "bug" :)