我的应用程序有一个黑色的背景,但在iOS 7中状态栏变成透明的了。因此我什么都看不到,只能看到角落里的绿色电池指示器。我该如何将状态栏文本颜色更改为像主屏幕上那样的白色呢?
我的应用程序有一个黑色的背景,但在iOS 7中状态栏变成透明的了。因此我什么都看不到,只能看到角落里的绿色电池指示器。我该如何将状态栏文本颜色更改为像主屏幕上那样的白色呢?
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
viewDidLoad
中添加NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;
。UIStatusBarStyleLightContent
,但是你仍然希望在一些屏幕上能够使用 UIStatusBarStyleDefault
, 你可以选择在控制器级别管理状态栏颜色,但在这种情况下,你需要在每个视图控制器中覆盖 preferredStatusBarStyle
(或者在所有其它视图控制器将继承的基础视图控制器中实现它)。 这里有另一种解决这个问题的方法:
UIViewControllerBasedStatusBarAppearance
为 NO
UIStatusBarStyle
为 UIStatusBarStyleLightContent
所有视图控制器都将使用白色文本来显示状态栏。现在只需要在需要黑色文本状态栏的视图控制器中添加此方法:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .darkContent
}
什么都没有发生,直到我找到了这个解决方案:
在 ViewController1
中添加以下代码 -
navigationController.modalPresentationCapturesStatusBarAppearance = true
let navigationController = UINavigationController(rootViewController: viewController2)
navigationController.modalPresentationStyle = .overFullScreen
navigationController.modalTransitionStyle = .crossDissolve
navigationController.modalPresentationCapturesStatusBarAppearance = true
self.present(navigationController, animated: true)
ViewController1呈现ViewController2
,那么尝试使用被呈现view controller的modalPresentationCapturesStatusBarAppearance
属性。
文档:
默认情况下,该属性值为false。当您通过调用present(_:animated:completion:)方法呈现一个view controller时,只有被呈现的view controller的modalPresentationStyle值为UIModalPresentationStyle.fullScreen时,状态栏外观控制才会从呈现到被呈现的view controller。将此属性设置为true,即可指定被呈现view controller控制状态栏外观,即使它不是全屏显示。对于全屏呈现的view controller,系统忽略此属性的值。在Xcode中最简单的方法(无需编码)是:
View controller-based status bar appearance
添加到您的Info.plist文件中,并将值设置为NO
。Deployment Info
中,您会找到一个名为Status Bar Style
的选项。将此选项的值设置为Light
。您将拥有白色
状态栏。
只需要更改 1) Info.plist
视图控制器基于状态栏的 appearance
-> NO
并写下
2)
[[UIApplication
sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// MARK: - Variables
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
// MARK: - View Life Cycle
override func viewDidAppear(_ animated: Bool) {
setNeedsStatusBarAppearanceUpdate()
}
这个方法对我有效:
Set the UIViewControllerBasedStatusBarAppearance
to YES
in the plist
The rootViewController
needs the method implementation for
-(UIStatusBarStyle)preferredStatusBarStyle
因为我的rootViewController
是由Cocoapods (JASidePanelController
)管理的,所以我通过分类添加了这个方法:
#import "JASidePanelController+StatusBarStyle.h"
@implementation JASidePanelController (StatusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
@end
删除 .plist 文件中的 View controller-based status bar appearance(如果您已创建),并重新创建它。
将状态栏样式设置为不透明黑色样式。
在 appDelegate 中的 didFinishLaunching 方法下添加以下代码。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];