2014-04-17 122 views
1

我有两个视图,我需要一个能够显示白色状态栏,另一个不显示状态栏。我已经成功地显示NO状态栏,但一直没有能够让主视图有一个白色的状态栏。我必须使用View controller-based status bar appearance = YES否则当我从“无状态栏视图”返回时,它使得整个应用程序没有状态栏。为什么状态栏不是白色!?!状态栏iOS7

现行规范dismising状态栏:

-(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

你永远做'setStatusBarHidden:NO'或'prefersStatusBarHidden NO'? – michaels

+0

'查看基于控制器的状态栏外观=无'你的意思是当我使用它? @ michael – user3546542

回答

0
  1. 你不应该在你的第一个块中调用prefersStatusBarHidden,你应该实现它来返回true。
  2. 确保在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仅控制状态栏中文本的颜色,背景颜色由导航栏本身决定。

+0

感谢您的回复。如果没有'prefersStatusBarHidden',视图不会消除状态栏 – user3546542

+0

我确实已将'UIViewControllerBasedStatusBarAppearance'设置为yes,但状态栏不会将其变为yes。 @David – user3546542

+0

另外需要注意的是,在iOS 7中,状态栏背景由导航栏建立。 UIStatusBarStyle确定文本颜色。 –

0

为什么状态栏不是白色!

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

,但一直没能有主要观点有一个白色的状态栏

的解决方案,我通常使用,是迫使navigationController的的导航栏下方状态栏,而不是渲染它在之后。这样,navigationBar的颜色/背景图像不会在状态栏下延伸,而状态栏的“背景颜色”现在是窗口的颜色。

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

_navigationController.navigationBar.clipsToBounds = YES; 

设置窗口的背景颜色,

self.window.backgroundColor = [UIColor whiteColor]; 


编号:Ironically, our "solution" was someone else's "bug" :)