statusBar的Style狀態(tài)分兩種:
(1)默認的黑色:UIStatusBarStyleDefault

(2)白色:UIStatusBarStyleLightContent

statusBar設(shè)置Style地方:
(1)plist設(shè)置statusBar:
在plist文件中里增加一行 UIStatusBarStyle(或“Status bar style”),
這里可以設(shè)置兩個值: UIStatusBarStyleDefault
和 UIStatusBarStyleLightContent。
設(shè)置后在app啟動的launch頁顯示的時候,statusBar的樣式就是plist設(shè)置的風(fēng)格。

(2)程序代碼中設(shè)置
代碼中設(shè)置又分兩種形式
(a)UIApplication:(對所有視圖,一次性修改)
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
(b)preferredStatusBarStyle(對單個視圖,修改某個視圖的statusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
以上方式修改狀態(tài)欄必須和 UIViewControllerBasedStatusBarAppearance 配合使用,不然statusBar還是默認黑色,并沒有改變。
在plist中設(shè)置鍵值對(默認值是YES)

當UIViewControllerBasedStatusBarAppearance = NO時:
UIApplication 的setStatusBarStyle方法生效:
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
viewController的preferredStatusBarStyle方法失效
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
UIViewControllerBasedStatusBarAppearance = YES時:
UIApplication 的setStatusBarStyle無效;
viewController的preferredStatusBarStyle方法有效。
注意: 將UIViewControllerBasedStatusBarAppearance設(shè)置為YES,當self.window.rootViewController是一個導(dǎo)航時,我們發(fā)現(xiàn),viewController的preferredStatusBarStyle方法還是沒有效果,這需要我們類化一個UINavigationController,在這個子類里面重寫childViewControllerForStatusBarStyle方法
例:
@interface ZYNavVC ()
@end
@implementation ZYNavVC
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.topViewController;
}
這樣就可以單獨改變每個子視圖的statusBar的顏色了。
有時會遇到這種需求,觸發(fā)某個事件(點擊一個按鈕),在某個界面中不時地改變statusBar的狀態(tài),只是就要用到setNeedsStatusBarAppearanceUpdate了。
@interface ViewController ()
@property(nonatomic,assign)UIStatusBarStyle statusBarStyle;
@end
@implementation ViewController
-(UIStatusBarStyle)preferredStatusBarStyle
{
return self.statusBarStyle;
}
-(void)statusBarChangeTarget:(UIButton *)sender
{
sender.selected = !sender.selected;
if (sender.selected)
{
self.statusBarStyle = UIStatusBarStyleDefault;
}
else
{
self.statusBarStyle = UIStatusBarStyleLightContent;
}
[self setNeedsStatusBarAppearanceUpdate];
}
當視圖是presentViewController 出來的時候,那就要modalPresentationCapturesStatusBarAppearance上場了。
設(shè)置modalPresentationCapturesStatusBarAppearance = YES;
//This controls whether this view controller takes over control of the status bar's appearance when presented non-full screen on another view controller. Defaults to NO.(它控制這個視圖控制器在另一個視圖控制器上顯示非全屏?xí)r是否接管狀態(tài)欄的外觀。默認為沒有。)
就可以控制里面導(dǎo)航欄狀態(tài)的變化了。
UIViewController *presentVC = [UIViewController new];
presentVC.modalPresentationCapturesStatusBarAppearance = YES;