IOS狀態欄設置(UIStatusBar)

一、知識普及

ios上狀態欄 就是指的最上面的20像素高的部分
狀態欄分前后兩部分,要分清這兩個概念,后面會用到:

  • 前景部分:就是指的顯示電池、時間等部分;
  • 背景部分:就是顯示黑色或者圖片的背景部分;

如下圖:前景部分為白色,背景部分為黑色


注意:這里只涉及到ios7以及更高版本,低版本下面的講解可能無效。

二、設置statusBar的【前景部分】

簡單來說,就是設置顯示電池電量、時間、網絡部分標示的顏色,
這里只能設置兩種顏色:

  • 默認的黑色(UIStatusBarStyleDefault
  • 白色(UIStatusBarStyleLightContent

可以設置的地方有兩個:plist設置里面和程序代碼里

1.plist設置statusBar

plist里增加一行UIStatusBarStyle(或者是Status bar style也可以),這里可以設置兩個值,就是上面提到那兩個 UIStatusBarStyleDefaultUIStatusBarStyleLightContent

這樣在app啟動的launch頁顯示的時候,statusBar的樣式就是上面plist設置的風格。

2.程序代碼里設置statusBar

全局設置狀態欄

首先將info.plist文件的View controller-based status bar appearance設置為NO,即可開啟全局設置,也就是說你在VC中對狀態欄的控制都將無效。


然后在AppDelegate.m中進行全局設置
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
或者
//相對于上面的接口,這個接口可以動畫的改變statusBar的前景色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

補充:可以通過viewWillAppearanceviewWillDisappear方法重新設置部分頁面的狀態欄

分頁面設置狀態欄

首先將info.plist文件的View controller-based status bar appearance設置為YES,即可開啟由VC來控制狀態欄的功能,在這種模式下,全局的設置將無效!!所以我們必須逐個頁面對狀態欄進行設置,否則狀態欄將維持默認的黑色字體和默認為顯示狀態。

  1. 當VC不在UINavigationController中時,在VC中添加一個方法
- (UIStatusBarStyle)preferredStatusBarStyle
{ 
    //返回白色
    return UIStatusBarStyleLightContent;
    //返回黑色
    //return UIStatusBarStyleDefault;
}

保險起見,在view的某個加載階段比如viewWillAppear中,執行:

[self setNeedsStatusBarAppearanceUpdate];
  1. 當VC在UINavigationController中時,VC并不能通過1)的方式控制狀態欄的顏色,詳見本文后面的參考資料,那么這個時候,有一個trick的方法可以在VC中間接的控制:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

或者自定義UINavigationController,重寫下面方法

- (UIViewController *)childViewControllerForStatusBarStyle
{
    return self.topViewController;
}

三、設置statusBar的【背景部分】

背景部分,簡單來說,就是背景色;改變方法有兩種:

1.系統提供的方法:

navigationBarsetBarTintColor接口,用此接口可改變statusBar的背景色

注意:一旦你設置了navigationBar- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改變statusBar的背景色,statusBar的背景色就會變成純黑色。
(注意:如果當前window的背景顏色沒有設置,statusBar的背景色也是純黑色)

2.另辟蹊徑:

創建一個UIView
設置該UIViewframe.sizestatusBar大小一樣,
設置該UIViewframe.origin{0,-20},
設置該UIView的背景色為你希望的statusBar的顏色,
navigationBaraddSubViewUIView即可。

iOS 9+ 狀態欄顏色設置

  1. info.plist文件中設置View controller-based status bar appearanceYES
  2. ViewController基類中重寫方法- (UIStatusBarStyle)preferredStatusBarStyle
// 字體設置為白色
- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

參考:
https://segmentfault.com/a/1190000003482218
http://www.lxweimin.com/p/e28e32d896d8
http://www.cnblogs.com/zxykit/p/5197893.html
http://blog.csdn.net/r614288863/article/details/46830403
http://www.lxweimin.com/p/4a03c2369ff3
https://blog.csdn.net/deft_mkjing/article/details/51705021

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容