ios 狀態欄statusBar的背景顏色

一、無導航條的情況:

系統默認狀態欄的字體顏色爲黑色,即UIStatusBarStyle=UIStatusBarStyleDefault,同時背景顏色和self.view.backgroundColor顏色一致,如下圖所示:

14F49066-52A9-4892-AF66-D2F9ED0D9001.png

假如我想讓狀態欄顏色設置成紅色,字體仍爲黑色,可以在需要顯示的那一頁進行如下設置:(最好寫在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];
}

效果如下:

50B2AB94-49CE-49AB-87A0-E6326C1CE00B.png

假如此時我想讓狀態欄文字顏色變成白色,可以這樣操作:
在上面代碼的基礎上再添加下面一段代碼:

- (UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
}

效果如下:


ED915548-3B47-45EE-AA27-7D068881A946.png

問題來了,當你在這一頁點擊按鈕進入下一頁後,狀態欄背景顏色不變,還是紅色,而字體顏色卻變成黑色了,比較鬧心!可以通過下面的方法隨心所欲的在任意一頁修改狀態欄的字體顏色(字體顏色只有白色和黑色)和背景顏色(直接複製到項目中即可

//設置字體顏色
- (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];
  }

下面的效果是第一頁要紅底白字,第二頁要綠底黑字,返回後也是正常顯示


9B2DA0CD-C106-4255-BA02-F34F55D59E99.png
50007497-1481-4F1E-9852-81BFD9CA7B9C.png

二、有導航條的情況

當我在上面的基礎上添加了導航條後,會發現字體顏色由之前的白色變成黑色了,背景顏色倒沒有發生變化


46CA6B3F-45D6-4628-9D34-0967320616D0.png

不用擔心,可以通過下面的方法完美解決:

//設置狀態欄顏色
- (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;
EC111815-4423-479F-BCBD-ADAE52F34E7C.png

54BC597D-F8B3-4EB5-BD0C-394AC0439073.png

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]];
}

效果:


81331546-9FF9-4314-96D7-29798D9034B0.png
13D7939F-E318-471C-9EBC-E1E92E619685.png


作者:來寶
鏈接:https://www.jianshu.com/p/5c09c2700038
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章