2014-04-17 197 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" :)