我想在我的应用程序中使用白色状态栏。为此,我将
View controller-based status bar appearance
设置为 NO
,将 Status bar style
设置为 UIStatusBarStyleLightContent
。但现在我需要在某些视图控制器中隐藏状态栏。
要隐藏它,我必须将
View controller-based status bar appearance
设置为 YES
并添加 - (BOOL)prefersStatusBarHidden {return YES;}
。但现在状态栏是黑色的。当 View controller-based status bar appearance
为 YES
时为黑色,当 NO
时为白色。
那么问题来了:如何设置白色状态栏并隐藏它?
更新:
VC中我想要白色状态栏的代码(
preferredStatusBarStyle
未调用)
VC中隐藏状态栏的代码
.plist
设置
结果是黑色的状态栏,隐藏在一些VC中
更新#2:
我知道使用已弃用的方法是不好的,但使用
[[UIApplication sharedApplication] setStatusBarHidden:YES];
一切都会按我想要的方式工作。如果有人有更好的解决方案请告诉我。
这是快速版本:
要隐藏状态栏或更改其外观,您需要在视图控制器本身中覆盖以下属性
override var prefersStatusBarHidden: Bool{
return true
}
上面隐藏状态栏,下面如果你想将其设置为白色:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
在您的 plist 文件中添加
View controller-based status bar appearance
Bool 属性并将其设置为 YES。
现在在您的视图控制器中添加如下方法:
// TO MAKE STATUS BAR WHITE
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
// TO MAKE STATUS BAR BLACK
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
// RETURN TRUE TO HIDE AND FALSE TO SHOW STATUS BAR
override func prefersStatusBarHidden() -> Bool {
return true
}
对于 Objective-C
- (BOOL)prefersStatusBarHidden {
return NO;
}
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
要删除冗余代码,您可以创建
BaseViewController
作为 UIViewController
的子类,并在该类中添加方法。并重写类中需要更改的方法。
如果您的视图控制器嵌入在 UINavigationController 中,请尝试在您的
中编写此代码-(BOOL)prefreStatusBarHidden
{
return [self.navigationController prefersStatusBarHidden];
}
您可以通过在基本视图控制器中设置导航背景图像来完成此操作。
UIImage *bgImage = [UIImage imageNamed:@"bg_navigationbar"];
[self.navigationController.navigationBar setBackgroundImage:bgImage forBarMetrics:UIBarMetricsDefault];