<1>設置狀態欄文字顏色以及背景顏色
這個設置引用自鏈接:https://www.jianshu.com/p/889cff2b3a52
蘋果目前狀態欄目前有兩種狀態顏色
iOS7以後
狀態欄的字體爲黑色:UIStatusBarStyleDefault
狀態欄的字體爲白色背景:UIStatusBarStyleLightContent
解決方案
1、在info.plist中,將View controller-based status bar appearance 設爲 NO
狀態欄字體的顏色只由下面的屬性設定,默認爲白色:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
解決個別vc中狀態欄字體顏色不同的辦法(即將顯示頁面的時候改成要的顏色,即將消失的時候再改回統一的顏色)
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
2、在info.plist中,將View controller-based status bar appearance 設爲 YES
在info.plist中 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方法跟本不會被調用。
解決辦法有兩個:
方法一:
設置 navbar 的barStyle 屬性會影響status bar 的字體和背景色。如下。
//status bar的字體爲白色 ,導航欄的背景色是黑色。
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//status bar的字體爲黑色 ,導航欄的背景色是白色,狀態欄的背景色也是白色。
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
方法二:
自定義一個navController的子類,在這個子類中重寫preferredStatusBarStyle方法:
MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
@implementation MyNav
- (UIStatusBarStyle)preferredStatusBarStyle {
UIViewController* topVC = self.topViewController;
return [topVC preferredStatusBarStyle];
}
隱藏某個控制器的狀態欄
1.View controller-based status bar appearance = NO
[[UIApplication sharedApplication] setStatusBarHidden:hidden];
2.View controller-based status bar appearance = YES
- (BOOL)prefersStatusBarHidden {
return YES;
}
3.設置Status bar is initially hidden = YES
可以隱藏啓動頁展示過程的狀態欄。
<2>設置導航欄顏色--就是原生navigationBar背景顏色,字體顏色
其實用原生的話,如果設計沒毛病,不改來改去還好,一套統一的bar顏色安安全全下來。完美。
但是如果設計這個頁面要白色,那個頁面要黃色,另一個頁面要花色,就比較坑了,也不是原生不能改,只是寫起來代碼會多點,建議有個做個navigationController基類,封裝個方法來處理。
再有空點,就自己寫個假的bar,搞掉系統的,用自己假bar來處理,就不用這個多代碼了,但是自己寫的話,需要自己處理很多東西,比如按鈕的大小適配了,文字的大小適配了,上面的view的寬高了。
用原生的bar修改顏色的話,代碼上吧:
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor colorFromHex:kNavBarNewColor] andSize:CGSizeMake(1, 64)] forBarMetrics:UIBarMetricsDefault];
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = [UIColor colorFromHex:kNavBarNewColor];
}
[self.navigationController.navigationBar setShadowImage:[UIImage imageWithColor:[UIColor colorFromHex:kNavBarNewColor]]];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor]};