文章轉(zhuǎn)載自:https://blog.csdn.net/qq_27633421/article/details/101770669
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
@end
// 如果viewController不是在 UINavgationController中,那么以上代碼可以把狀態(tài)欄文本顏色設(shè)置為白色,但是如果 viewController是添加到導(dǎo)航上的,你會(huì)發(fā)現(xiàn)上面代碼達(dá)不到你想要的效果,狀態(tài)欄文本顏色是黑色的!
/**這是為什么? **/
// 經(jīng)過(guò)查找資料,才知道原來(lái)是這么一回事:
/*UINavigationController不會(huì)將 preferredStatusBarStyle方法調(diào)用轉(zhuǎn)給它的子視圖,而是由它自己管理狀態(tài),而且它也應(yīng)該那樣做手报。因?yàn)閁INavigationController 包含了它自己的狀態(tài)欄
勤晚,因此就算 UINavigationController中的viewController 實(shí)現(xiàn)了 preferredStatusBarStyle方法也不會(huì)調(diào)用 偎谁。*/
// 那 UINavigationController是怎么決定該返回
//UIStatusBarStyleLightContent 還是 UIStatusBarStyleDefault的呢?
//它是基于它的 UINavigationBar.barStyle屬性,默認(rèn)(UIBarStyleDefault)的是黑色文本的狀態(tài)欄仑氛,而 UIBarStyleBlack是設(shè)置為白色文本的狀態(tài)欄瓷产,
// 也就是說(shuō),如果viewController是在導(dǎo)航中的掖举,想要改變狀態(tài)欄文本顏色,那么需要通過(guò)代碼:
// 將status bar 文本顏色設(shè)置為白色
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
// 將status bar 文本顏色設(shè)置為黑色 ,默認(rèn)就是黑色
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
//另外,如果viewController在導(dǎo)航中娜庇,還想通過(guò) preferredStatusBarStyle 方法設(shè)置狀態(tài)欄文本顏色,那就只能隱藏導(dǎo)航欄了:
// 隱藏導(dǎo)航欄后 系統(tǒng)會(huì)調(diào)用 preferredStatusBarStyle 方法
self.navigationController.navigationBarHidden = YES;
// 另外我們也可以主動(dòng)調(diào)用 preferredStatusBarStyle 方法
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// 必須放在 viewDidAppear: 方法里面才起效果(自動(dòng)調(diào)用 preferredStatusBarStyle)
// 放在 viewWillAppear: 方法里面不起效果
[self setNeedsStatusBarAppearanceUpdate];
}
// 如果在infoplist中設(shè)置了viewcontrollerstatusappearence = no的話塔次,就不用這個(gè)
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
// 直接設(shè)置就可以UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent