在网上搜索了很久,我也试了很多种情况,下面我为每种情况排布一下优先级,刚开始的时候我没有写播放器,使用的是腾讯的SDK,发现我之前设置的状态栏变化不在发生变化啦,所以在这里做一个小结,Xcode默认的颜色是黑色,记录优化代码的点滴
第一种:
如果其他界面默认都是黑色的,只有几个个别的界面需要白色的花,最简单的方法就是
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
}
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
}
在需要的地方设置就可以啦
第二种:
使用
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
方法改变状态栏颜色
有导航条的时候,单独使用
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
} 是不起作用的,必须配合
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.topViewController;
}使用
[self setNeedsStatusBarAppearanceUpdate]; 这行代码是刷新状态栏
- (UIStatusBarStyle)preferredStatusBarStyle {
if (self.scrollOffect < - _headerHeight + NavBarHeight) {
return UIStatusBarStyleLightContent;
}
return UIStatusBarStyleDefault;
}
刷新:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat yOffset = scrollView.contentOffset.y;
self.scrollOffect = yOffset;
[self setNeedsStatusBarAppearanceUpdate];
}
就可以动态更新状态栏的颜色啦
⚠️注意,这种写法影响第一种写法,使用这种写法第一种情况是失效的,小萌当时用的就是第一种写法腾讯sdk用的第二种就出错啦
第三种:如果需要大多数界面都是白色的话可以全局设置
这两个要一起使用,在info.plist中 View controller-based status bar appearance 设为 NO,这样默认的状态栏就是白色的啦,并且第一种情况是失效的
⚠️注意 设置之后第一种情况和第二种情况都是失效的,优先级也是最高的,开发伙伴们灵活应用