先說一下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;
}