關(guān)于狀態(tài)欄UIStatusBarStyle
狀態(tài)欄有以下幾種顯示風(fēng)格:
1.UIStatusBarStyleDefault
2.UIStatusBarStyleLightContent
API_AVAILABLE(ios(7.0))
3.UIStatusBarStyleDarkContent
API_AVAILABLE(ios(13.0))
4.UIStatusBarStyleBlackTranslucent API_DEPRECATED_WITH_REPLACEMENT("UIStatusBarStyleLightContent", ios(2.0, 7.0)) = 1,
5.UIStatusBarStyleBlackOpaque API_DEPRECATED_WITH_REPLACEMENT("UIStatusBarStyleLightContent", ios(2.0, 7.0)) = 2,
UIStatusBarStyleLightContent 的背景顏色加載方法
UIView *statusBar = [[UIView alloc] initWithFrame:
CGRectMake(0, -20, self.view.frame.size.width, 20)];
statusBar.backgroundColor = myColor;
[self.navigationController.navigationBar addSubview:statusBar];
我們想要改變狀態(tài)欄樣式只需要在viewController里面重載preferredStatusBarStyle方法即可
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
如何調(diào)用preferredStatusBarStyle方法呢
[self setNeedsStatusBarAppearanceUpdate];
//讓其強制刷新 有些類似于 view的layoutIfNeeded方法
當(dāng)我們調(diào)用setNeedsStatusBarAppearanceUpdate時,系統(tǒng)會調(diào)用application.window.rootViewController的preferredStatusBarStyle方法,而不是當(dāng)前控制器的preferredStatusBarStyle方法。在這個時候,一個重要的方法就要派上用場了,那就是:childViewControllerForStatusBarStyle。
childViewControllerForStatusBarStyle默認(rèn)返回nil。所以我們需要重寫這個方法。
加入跟試圖控制器是navigationController,那么,我們需要重寫childViewControllerForStatusBarStyle
那么,我們子類化一個導(dǎo)航控制器ZXNavigationController,重寫它的childViewControllerForStatusBarStyle方法:
@implementation ZXNavigationController
- (UIViewController *)childViewControllerForStatusBarStyle
{
return self.topViewController;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
提示:首先info.plist添加
View controller-based status bar appearance 將其設(shè)置為YES
如果設(shè)置為NO則不能手動對狀態(tài)欄樣式進(jìn)行修改
部分內(nèi)容轉(zhuǎn)載于https://www.cnblogs.com/sundaysgarden/articles/9194636.html