如何在一次 ViewController 中刷新 preferredStatusBarStyle 两次或更多次
How to refresh preferredStatusBarStyle in one ViewController for two or more times
我的旧代码:
- (void)setStatusBarLight:(BOOL)value {
if (value) {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
} else {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
}
现在不推荐使用 setStatusBarStyle。 Apple 说,我应该使用 preferredStatusBarStyle。但这只调用一次。但是在我的选项中,状态栏必须在此视图控制器中进行一些用户操作后更改颜色。
我能做什么?
这是一个解决方案:
[self setNeedsStatusBarAppearanceUpdate];
并且查看基于控制器的状态栏外观在Info.plist
中设置为YES
这里是一个例子,有一个带有深色导航栏和白色状态栏文本的视图控制器,并呈现一个带有浅色导航栏和黑色状态栏文本的视图控制器:
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;
}
open/present vc2 和 statusBar 文本将改变其颜色
- (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];
}
信息:setNavBarColor:ShadowColor:是我的类别中的自定义方法
不要忘记在 info.plist 上将 View controller-based status bar appearance
设置为 YES
。
我的旧代码:
- (void)setStatusBarLight:(BOOL)value {
if (value) {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
} else {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
}
现在不推荐使用 setStatusBarStyle。 Apple 说,我应该使用 preferredStatusBarStyle。但这只调用一次。但是在我的选项中,状态栏必须在此视图控制器中进行一些用户操作后更改颜色。
我能做什么?
这是一个解决方案:
[self setNeedsStatusBarAppearanceUpdate];
并且查看基于控制器的状态栏外观在Info.plist
中设置为YES这里是一个例子,有一个带有深色导航栏和白色状态栏文本的视图控制器,并呈现一个带有浅色导航栏和黑色状态栏文本的视图控制器:
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;
}
open/present vc2 和 statusBar 文本将改变其颜色
- (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];
}
信息:setNavBarColor:ShadowColor:是我的类别中的自定义方法
不要忘记在 info.plist 上将 View controller-based status bar appearance
设置为 YES
。