如何在iOS中更改状态栏文本颜色

1087

我的应用程序有一个黑色的背景,但在iOS 7中状态栏变成透明的了。因此我什么都看不到,只能看到角落里的绿色电池指示器。我该如何将状态栏文本颜色更改为像主屏幕上那样的白色呢?


查看我的答案以获取更好的解决方案 https://dev59.com/OmMm5IYBdhLWcg3wX98W#65367444 - Ucdemir
Xcode似乎在不断变化,因此我建议向下滚动以查找更近期的解决方案(例如,截至2021年的超级简单答案)。 - Eric33187
60个回答

4
在Info.plist中将“View controller-based status bar appearance”设置为NO。
在AppDelegate中添加:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

4
在iOS 8中: 在viewDidLoad中添加NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;

3
如果你的应用默认需要使用 UIStatusBarStyleLightContent,但是你仍然希望在一些屏幕上能够使用 UIStatusBarStyleDefault, 你可以选择在控制器级别管理状态栏颜色,但在这种情况下,你需要在每个视图控制器中覆盖 preferredStatusBarStyle(或者在所有其它视图控制器将继承的基础视图控制器中实现它)。 这里有另一种解决这个问题的方法:
  • 在 plist 中设置 UIViewControllerBasedStatusBarAppearanceNO
  • 设置 UIStatusBarStyleUIStatusBarStyleLightContent

所有视图控制器都将使用白色文本来显示状态栏。现在只需要在需要黑色文本状态栏的视图控制器中添加此方法:

-(void)viewWillAppear:(BOOL)animated  
{  
  [super viewWillAppear:animated];  
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}    

-(void)viewWillDisappear:(BOOL)animated  
{  
  [super viewWillAppear:animated];  
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}    

3
在我的情况下,没有任何帮助。我试图在嵌入了导航控制器(NavigationController)的ViewController2中更改StatusBar的颜色,而该导航控制器又是从ViewController1模态呈现出来的。但这种方法不起作用:
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,系统忽略此属性的值。

3

在Xcode中最简单的方法(无需编码)是:

  • View controller-based status bar appearance添加到您的Info.plist文件中,并将值设置为NO
  • 现在,进入您的项目目标,在Deployment Info中,您会找到一个名为Status Bar Style的选项。将此选项的值设置为Light

您将拥有白色状态栏。


2

只需要更改 1) Info.plist 视图控制器基于状态栏的 appearance -> NO 并写下 2)

  [[UIApplication
 sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

2
这份答案是在hackingwithswift网站的帮助下完成的。
对于iOS (13, *)系统,
有时我们需要不同颜色的状态栏,例如对于一个视图控制器,我们需要黑色状态栏,对于另一个视图控制器,我们需要白色状态栏。
那么我们应该怎么做呢?
我们需要在ViewController中添加以下代码。
    // MARK: - Variables
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    // MARK: - View Life Cycle
    override func viewDidAppear(_ animated: Bool) {
        setNeedsStatusBarAppearanceUpdate()
    }

这段代码可以改变特定视图控制器的状态栏颜色或白色。我们可以在preferredStatusBarStyle中将其更改为.dark。 访问hackingwithswift了解更多详情

2
这对我有用:

这个方法对我有效:

  1. Set the UIViewControllerBasedStatusBarAppearance to YES in the plist

  2. The rootViewController needs the method implementation for

    -(UIStatusBarStyle)preferredStatusBarStyle
    

因为我的rootViewController是由Cocoapods (JASidePanelController)管理的,所以我通过分类添加了这个方法:

#import "JASidePanelController+StatusBarStyle.h"

@implementation JASidePanelController (StatusBarStyle)

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

@end

2
  • 删除 .plist 文件中的 View controller-based status bar appearance(如果您已创建),并重新创建它。

  • 状态栏样式设置为不透明黑色样式

在 appDelegate 中的 didFinishLaunching 方法下添加以下代码。

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

2
这似乎是当前 Xcode 和 iOS 7 版本的问题。
在苹果的开发者论坛上,有一些相关内容可以参考"iOS 7 Beta Livability" on the Apple Developer Forums*(目前有32个帖子),其中涉及到了 UIStatusBarStyleLightContent 的搜索结果。
我也尝试将其设置为浅色版本时遇到了这个问题。
(这只是对 Aaron 回答的跟进。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接