關於iOS7裏導航控制器中的子控制器設置StatusBar狀態失效的問題

先說一下iOS7裏控制StatusBar的兩種方式:



第一種方式:全局控制StatusBar

1. 在項目的Info.plist文件裏設置UIViewControllerBasedStatusBarAppearance爲NO。

2. 使用[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];方法設置顏色。


第二種方式:基於控制器的方式控制StatusBar
1. 在項目的Info.plist文件裏設置UIViewControllerBasedStatusBarAppearance爲YES。
2.在各個UIViewController裏分別控制狀態欄的顏色和狀態。
通過在控制器裏實現以下方法來設置狀態欄的顏色狀態
- (UIStatusBarStyle)preferredStatusBarStyle

- (BOOL)prefersStatusBarHidden


目前只有兩種顏色可選:
UIStatusBarStyleLightContent - 白色字
UIStatusBarStyleDefault          - 黑色字


-------------------------


使用第二種方式的問題是,如果一個控制器在UINavigationController內,則上述的控制StatusBar的方法沒有被調用。


解決辦法:讓UINavigationController實現- (UIViewController *)childViewControllerForStatusBarStyle方法。將頂層的控制器返回。這樣就可以了。

可以寫一個UINavigationController的category,實現該方法。包含到項目裏。

- (UIViewController *)childViewControllerForStatusBarStyle

{

   return self.topViewController;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章