知識(shí)普及:
iOS上,狀態(tài)欄就是指的最上面的20像素高的部分
背景色:默認(rèn)透明色;
前景色:就是指的顯示電池、時(shí)間等部分,默認(rèn)黑色;
如下圖,背景色為黑色,前景色為白色
狀態(tài)欄.png
一、設(shè)置背景色
默認(rèn)情況下?tīng)顟B(tài)欄的背景色是透明的(蘋果推薦),我們看到其實(shí)導(dǎo)航欄的背景色,如果非要改狀態(tài)欄背景色的話也是有辦法的:
//設(shè)置狀態(tài)欄背景色
- (void)setStatusBarBackgroundColor:(UIColor *)color {
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
NSLog(@"statusBar.backgroundColor--->%@",statusBar.backgroundColor);
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = color;
}
}
二、設(shè)置前景色(兩類辦法)
(1)在plist文件中,把View controller-based status bar appearance設(shè)置為NO。然后寫如下代碼:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
或
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
(2)在plist文件中,把View controller-based status bar appearance設(shè)置為YES。然后寫如下代碼:
//plist中 View controller-based status bar appearance 設(shè)為YES 才有用
// 狀態(tài)欄文字黑色 UIBarStyleDefault
// 狀態(tài)欄文字白色 UIBarStyleBlack
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
或
//在需要的控制器里面重寫這個(gè)方法
- (UIStatusBarStyle)preferredStatusBarStyle{
//黑色:UIStatusBarStyleDefault
return UIStatusBarStyleLightContent;//白色
}
ps:
運(yùn)行會(huì)發(fā)現(xiàn)這個(gè)方法根本沒(méi)被調(diào)用,因?yàn)橄到y(tǒng)會(huì)調(diào)用container(容器控制器)的preferredStatusBarStyle這個(gè)方法(app.window.rootViewController的preferred的方法,一般我們用UINavigationController或者UITabBarController來(lái)做container),也就是根本不會(huì)調(diào)用子控制器(我們所看到的UIViewcontroller)的preferredStatusBarStyle方法。這個(gè)時(shí)候- (UIViewController *)childViewControllerForStatusBarStyle:就派上用場(chǎng)了。
寫一個(gè)UINavigationController的類別 .m如下:
#import "UINavigationController+CY.h"
@implementation UINavigationController (CY)
-(UIViewController *)childViewControllerForStatusBarStyle{
//當(dāng)前顯示的控制器
// return self.topViewController;
//是某個(gè)導(dǎo)航棧的棧頂視圖
return self.visibleViewController;
}
-(UIViewController *)childViewControllerForStatusBarHidden{
return self.visibleViewController;
}
@end
這下再運(yùn)行發(fā)現(xiàn)就好了。
ps:
該類擴(kuò)展的意思就是,我重寫了,你不要調(diào)用Container(NavigationController或者UITabBarController)的preferredStatusBarStyle這個(gè)方法了,去調(diào)用self.visibleViewController的preferredStatusBarStyle,那么,我們寫在UIViewcontroller里面的方法就會(huì)被調(diào)用了,就能更改StatusBar的前景顏色了。
參考:https://www.cnblogs.com/ilovelqq/p/4769655.html