iOS开发 动态修改状态栏颜色

关于状态栏UIStatusBarStyle

状态栏有以下几种显示风格:
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];

我们想要改变状态栏样式只需要在viewController里面重载preferredStatusBarStyle方法即可

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

如何调用preferredStatusBarStyle方法呢

 [self setNeedsStatusBarAppearanceUpdate];
//让其强制刷新 有些类似于 view的layoutIfNeeded方法

当我们调用setNeedsStatusBarAppearanceUpdate时,系统会调用application.window.rootViewController的preferredStatusBarStyle方法,而不是当前控制器的preferredStatusBarStyle方法。在这个时候,一个重要的方法就要派上用场了,那就是:childViewControllerForStatusBarStyle。

childViewControllerForStatusBarStyle默认返回nil。所以我们需要重写这个方法。
加入跟试图控制器是navigationController,那么,我们需要重写childViewControllerForStatusBarStyle

那么,我们子类化一个导航控制器ZXNavigationController,重写它的childViewControllerForStatusBarStyle方法:

@implementation ZXNavigationController

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

- (void)viewDidLoad {
    [super viewDidLoad];
}

提示:首先info.plist添加
View controller-based status bar appearance 将其设置为YES
如果设置为NO则不能手动对状态栏样式进行修改

部分内容转载于https://www.cnblogs.com/sundaysgarden/articles/9194636.html

你可能感兴趣的:(iOS开发 动态修改状态栏颜色)