第一步:在info.plist中添加一個字段:view controller -base status bar 設置為NO(如下圖)
第二步:在一個所有界面都繼承的父類里添加:
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContentanimated:NO];
這樣就搞定了,很簡單吧!!!!
注意事項:
狀態欄的字體為黑色:UIStatusBarStyleDefault
狀態欄的字體為白色:UIStatusBarStyleLightContent
[一]解決個別vc中狀態欄字體顏色不同的辦法:
1、在info.plist中,將View controller-based status bar appearance設為[NO]
2、在app delegate中:[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
3、在個別狀態欄字體顏色不一樣的vc中
-(void)viewWillAppear:(BOOL)animated{
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
[二] 在info.plist中,將View controller-based status bar appearance設為YES,或者沒有設置。View controller-based status bar appearance的默認值就是YES。如果View controller-based status bar appearance為YES。則[UIApplication sharedApplication].statusBarStyle 無效。
用下面的方法:
1、在vc中重寫vc的preferredStatusBarStyle方法。
-(UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleDefault;}
2、在viewDidload中調用:[self setNeedsStatusBarAppearanceUpdate];但是,當vc在nav中時,上面方法沒用,vc中的preferredStatusBarStyle方法根本不用被調用。原因是,[self setNeedsStatusBarAppearanceUpdate]發出后,只會調用navigation controller中的preferredStatusBarStyle方法,vc中的preferredStatusBarStyley方法跟本不會被調用。
解決辦法有兩個:(1)設置navbar的barStyle 屬性會影響status bar 的字體和背景色。如下:
//status bar的字體為白色//導航欄的背景色是黑色。
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//status bar的字體為黑色//導航欄的背景色是白色,狀態欄的背景色也是白色。
//self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
(2)自定義一個nav bar的子類,在這個子類中重寫preferredStatusBarStyle方法:
BCNav* nav = [[BCNav alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
@implementation BCNav
- (UIStatusBarStyle)preferredStatusBarStyle{
UIViewController* topVC = self.topViewController;
return [topVC preferredStatusBarStyle];
}
隱藏狀態欄的方法:在info.plist中添加一個字段--Status bar is initially hidden設置為YES