如何在一个视图控制器中刷新首选状态栏样式两次或更多次



我的旧代码:

- (void)setStatusBarLight:(BOOL)value {
    if (value) {
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    } else {
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
    }
}

现在 setStatusBarStyle 已被弃用。苹果说,我应该使用preferredStatusBarStyle。但这只调用一次。但是在我的选项中,状态栏必须在此视图控制器中的某些用户操作后更改颜色。

我能做什么?

这是一个解决方案:

[self setNeedsStatusBarAppearanceUpdate];

基于视图控制器的状态栏外观在 Info.plist 中设置为"是"

下面是

一个示例,该视图控制器具有深色导航栏和白色状态栏文本,并显示具有浅色导航栏和黑色状态栏文本的视图控制器:

vc1(深色导航栏,白色状态栏文本)

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self setNeedsStatusBarAppearanceUpdate];
}
- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleDefault;
}

vc2(浅色导航栏,黑色状态栏文本)

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self setNeedsStatusBarAppearanceUpdate];
}
- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

打开/显示 vc2 和状态栏文本将更改其颜色

- (void)openVC2 {
    UIViewController *vc = [[UIViewController alloc]init];
    UINavigationController *nvc = [[UINavigationController alloc]initWithRootViewController:vc];
    [nvc.navigationBar setNavBarColor:COLOR_gray_light ShadowColor:[UIColor clearColor]];
    [self presentViewController:nvc animated:YES completion:nil];
}

info: setNavBarColor:ShadowColor:是我的类别中的自定义方法

不要忘记在您的info.plist上设置View controller-based status bar appearance YES

最新更新