方案一. Info.plist中設(shè)置UIViewControllerBasedStatusBarAppearance 為NO時(shí):
(1) 在info.plist中設(shè)置 Status bar style為UIStatusBarStyleLightContent或UIStatusBarStyleDefault有效, 所有頁面默認(rèn)為此樣式
(2) 在需要改變狀態(tài)欄顏色的ViewController中在ViewDidLoad方法中添加代碼:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
方案二. Info.plist中設(shè)置UIViewControllerBasedStatusBarAppearance 為YES
(1) 在info.plist中設(shè)置 Status bar style為UIStatusBarStyleLightContent或UIStatusBarStyleDefault無效, 所有頁面默認(rèn)樣式為UIStatusBarStyleDefault.
(2) 在根視圖控制其中添加代碼:
- (UIViewController *)childViewControllerForStatusBarStyle {
// return self.topViewController;//棧頂?shù)目刂破?一般就是當(dāng)前可見的控制器
return self.visibleViewController;//當(dāng)前可見的控制器
}
即狀態(tài)欄樣式由當(dāng)前可見的控制器決定
(3) 在某控制器添加代碼:
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;//UIStatusBarStyleDefault
}
只有完成(2)時(shí), 此代碼才有效
(4) 當(dāng)某頁面已經(jīng)顯示的時(shí)候需要?jiǎng)討B(tài)地更改狀態(tài)欄樣式, 添加一下代碼:
[self setNeedsStatusBarAppearanceUpdate];
另外, 在使用模態(tài)視圖跳轉(zhuǎn)后, 狀態(tài)欄會(huì)變成跳轉(zhuǎn)后的頁面設(shè)置的顏色, 而且返回后狀態(tài)欄顏色不會(huì)改變. 例如UIAlertController的使用就是模態(tài)視圖跳轉(zhuǎn), 我們需要在回收模塊視圖窗口后刷新狀態(tài)欄:
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *action5 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
[self setNeedsStatusBarAppearanceUpdate];
}];
[alertController addAction:action5];
[self presentViewController:alertController animated:true completion:nil];
參考資料:http://my.oschina.net/shede333/blog/304560
http://blog.csdn.net/ouyangtianhan/article/details/45893797