一、無導航條的情況:
系統默認狀態欄的字體顏色爲黑色,即UIStatusBarStyle=UIStatusBarStyleDefault,同時背景顏色和self.view.backgroundColor顏色一致,如下圖所示:
假如我想讓狀態欄顏色設置成紅色,字體仍爲黑色,可以在需要顯示的那一頁進行如下設置:(最好寫在viewWillAppear裏面)
//設置狀態欄顏色
- (void)setStatusBarBackgroundColor:(UIColor *)color {
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = color;
}
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setStatusBarBackgroundColor:[UIColor redColor]];
self.view.backgroundColor = [UIColor yellowColor];
}
效果如下:
假如此時我想讓狀態欄文字顏色變成白色,可以這樣操作:
在上面代碼的基礎上再添加下面一段代碼:
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
效果如下:
問題來了,當你在這一頁點擊按鈕進入下一頁後,狀態欄背景顏色不變,還是紅色,而字體顏色卻變成黑色了,比較鬧心!可以通過下面的方法隨心所欲的在任意一頁修改狀態欄的字體顏色(字體顏色只有白色和黑色)和背景顏色(直接複製到項目中即可
//設置字體顏色
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;//白色
}
//設置狀態欄顏色
- (void)setStatusBarBackgroundColor:(UIColor *)color {
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = color;
}
}
//!!!重點在viewWillAppear方法裏調用下面兩個方法
-(void)viewWillAppear:(BOOL)animated{
[self preferredStatusBarStyle];
[self setStatusBarBackgroundColor:[UIColor redColor]];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
}
下面的效果是第一頁要紅底白字,第二頁要綠底黑字,返回後也是正常顯示
二、有導航條的情況
當我在上面的基礎上添加了導航條後,會發現字體顏色由之前的白色變成黑色了,背景顏色倒沒有發生變化
不用擔心,可以通過下面的方法完美解決:
//設置狀態欄顏色
- (void)setStatusBarBackgroundColor:(UIColor *)color {
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = color;
}
}
-(void)viewWillAppear:(BOOL)animated{
[self setStatusBarBackgroundColor:[UIColor redColor]];
[UIApplication sharedApplication].statusBarStyle=UIStatusBarStyleLightContent;
}
--->!!!同時別忘了在info plist裏面將View controller-based status bar appearance設置成NO,(默認是YES)
現在基本的設備都適配ios7以上設備,默認的狀態欄字體顏色是黑色
[UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleDefault;
現在基本的設備都適配ios7以上設備,默認的狀態欄字體顏色是黑色
[UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleLightContent;
Demo下載地址:https://github.com/zhuchenglong/StatusBarDemo
以下是我在實際項目中使用的:
//設置狀態欄顏色
- (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;
}
}
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;//白色
}
- (void)viewDidLoad {
[super viewDidLoad];
//Y起點在導航條下面
self.edgesForExtendedLayout = UIRectEdgeNone;
//設置navigationItem返回的文字
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.backBarButtonItem = item;
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//設置導航條透明度
self.navigationController.navigationBar.translucent = NO;//不透明
[[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:1];
//圖標顏色爲黑色
[self.navigationController.navigationBar setTintColor:[UIColor blackColor]];
//導航欄背景顏色
[self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]];
//導航條下面的黑線
self.navigationController.navigationBar.clipsToBounds = NO;
//刷新狀態欄背景顏色
// [self setNeedsStatusBarAppearanceUpdate];
//設置狀態欄顏色
[self setStatusBarBackgroundColor:[UIColor blackColor]];
}
//一定要在viewWillDisappear裏面寫,如果寫在viewDidDisappear裏面會出問題!!!!
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
//爲了不影響其他頁面在viewDidDisappear做以下設置
self.navigationController.navigationBar.translucent = YES;//透明
[self setStatusBarBackgroundColor:[UIColor clearColor]];
}
效果:
作者:來寶
鏈接:https://www.jianshu.com/p/5c09c2700038
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。