一、知識普及
ios上狀態欄 就是指的最上面的20像素高的部分
狀態欄分前后兩部分,要分清這兩個概念,后面會用到:
- 前景部分:就是指的顯示電池、時間等部分;
- 背景部分:就是顯示黑色或者圖片的背景部分;
如下圖:前景部分為白色,背景部分為黑色
注意:這里只涉及到ios7以及更高版本,低版本下面的講解可能無效。
二、設置statusBar的【前景部分】
簡單來說,就是設置顯示電池電量、時間、網絡部分標示的顏色,
這里只能設置兩種顏色:
- 默認的黑色(
UIStatusBarStyleDefault
) - 白色(
UIStatusBarStyleLightContent
)
可以設置的地方有兩個:plist設置里面和程序代碼里
1.plist設置statusBar
在plist
里增加一行UIStatusBarStyle
(或者是Status bar style
也可以),這里可以設置兩個值,就是上面提到那兩個 UIStatusBarStyleDefault
和UIStatusBarStyleLightContent
這樣在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];
補充:可以通過viewWillAppearance
、viewWillDisappear
方法重新設置部分頁面的狀態欄
分頁面設置狀態欄
首先將info.plist
文件的View controller-based status bar appearance
設置為YES
,即可開啟由VC來控制狀態欄的功能,在這種模式下,全局的設置將無效!!所以我們必須逐個頁面對狀態欄進行設置,否則狀態欄將維持默認的黑色字體和默認為顯示狀態。
- 當VC不在
UINavigationController
中時,在VC中添加一個方法
- (UIStatusBarStyle)preferredStatusBarStyle
{
//返回白色
return UIStatusBarStyleLightContent;
//返回黑色
//return UIStatusBarStyleDefault;
}
保險起見,在view的某個加載階段比如viewWillAppear中,執行:
[self setNeedsStatusBarAppearanceUpdate];
- 當VC在
UINavigationControlle
r中時,VC并不能通過1)的方式控制狀態欄的顏色,詳見本文后面的參考資料,那么這個時候,有一個trick
的方法可以在VC中間接的控制:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
或者自定義UINavigationController
,重寫下面方法
- (UIViewController *)childViewControllerForStatusBarStyle
{
return self.topViewController;
}
三、設置statusBar的【背景部分】
背景部分,簡單來說,就是背景色;改變方法有兩種:
1.系統提供的方法:
navigationBar
的setBarTintColor
接口,用此接口可改變statusBar
的背景色
注意:一旦你設置了navigationBar
的- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
接口,那么上面的setBarTintColor
接口就不能改變statusBar
的背景色,statusBar
的背景色就會變成純黑色。
(注意:如果當前window的背景顏色沒有設置,statusBar
的背景色也是純黑色)
2.另辟蹊徑:
創建一個UIView
,
設置該UIView
的frame.size
和statusBar
大小一樣,
設置該UIView
的frame.origin
為{0,-20}
,
設置該UIView
的背景色為你希望的statusBar
的顏色,
在navigationBar
上addSubView
該UIView
即可。
iOS 9+ 狀態欄顏色設置
- 在
info.plist
文件中設置View controller-based status bar appearance
為YES
- 在
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