繁体   English   中英

状态栏iOS7

[英]Status Bar iOS7

我有两个视图,我需要一个视图才能显示白色状态栏,而另一个视图则不显示状态栏。 我已成功使其显示为“否”状态栏,但无法使主视图具有“白色”状态栏。 我必须使用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;
}
  1. 您不应在第一个块中调用preferredsStatusBarHidden,而应实现它以返回true。
  2. 确保在Info.plist文件中将基于View控制器的状态栏外观(UIViewControllerBasedStatusBarAppearance)设置为yes。

这一切都意味着在VC中要隐藏状态栏的地方,需要放置:

-(BOOL)prefersStatusBarHidden
{
    return true;
}

-(UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleDefault;
}

在另一个VC中,输入:

-(BOOL)prefersStatusBarHidden
{
    return false;
}

-(UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

刚刚检查了一下,一切似乎都按预期工作。 请注意,在iOS 7中,UIStatusBarStyle仅控制状态栏中文本的颜色,背景颜色由导航栏本身确定。

为什么状态栏不会白!!

好吧,仅仅因为它是透明的。 状态栏的“背景色”现在(在ios7之后)是状态栏后面的视图/窗口的颜色。

但无法使主视图具有白色状态栏

我通常使用的解决方案,是迫使navigationController的的导航栏呈现状态栏下方 ,而不是后面 这样,navigationBar的颜色/背景图像不会在状态栏下扩展,并且状态栏的“背景色”现在是窗口的颜色。

要强制导航栏在状态栏下方开始,请将其clipsToBounds属性设置为YES。

_navigationController.navigationBar.clipsToBounds   = YES;

要设置窗口的背景色,

self.window.backgroundColor = [UIColor whiteColor];


参考: 具有讽刺意味的是,我们的“解决方案”是别人的“错误” :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM