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

我的应用程序具有深色背景,但是在 iOS 7 中状态栏变为透明的。所以我看不到任何东西,只有角落的绿色电池指示器。如何将状态栏文本颜色更改为白色,就像在主屏幕上一样?

答案

  1. 在. plist 文件中,将UIViewControllerBasedStatusBarAppearance设置为YES

  2. viewDidLoad执行[self setNeedsStatusBarAppearanceUpdate];

  3. 添加以下方法:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }

注意 :这不适用于UINavigationController内部的控制器,请参见下面的 Tyson 评论 :)

Swift 3-这将在UINavigationController内部工作控制器。将此代码添加到您的控制器中。

// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
import Foundation
import UIKit
import SwiftUI

class HostingController: UIHostingController<ContentView> {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}
window.rootViewController = UIHostingController(rootView: ContentView())
window.rootViewController = HostingController(rootView: ContentView())

或者,您可以选择不使用基于视图控制器的状态栏外观:

  1. Info.plist View controller-based status bar appearanceNO
  2. 调用[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

注意:此方法已在 iOS9 中弃用。请改用 UIViewController 上的preferredStatusBarStyle 。 (请参阅Apple Developer Library

您无需编写任何代码行就可以做到这一点!
执行以下操作,使整个应用程序中的状态栏文本变为白色

在您的项目 plist文件中:

  • 状态栏样式: Transparent black style (alpha of 0.5)
  • 查看基于控制器的状态栏外观: NO
  • 状态栏最初是隐藏的: NO
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   ......
   ...
}

对我而言,使用其他答案(以及来自其他来源 / 文档)中的所有内容并没有发生任何事情。有所帮助的是在 XIB 中将导航栏样式设置为 “黑色”。这将文本更改为白色,完全没有任何代码。

在此处输入图片说明

这些都不适合我,因此这是一个可行的解决方案...

Info.plist ,添加一行:

UIViewControllerBasedStatusBarAppearance ,并将值设置为NO

然后,在didFinishLaunchingWithOptions中的 AppDelegate 中,添加以下行:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];

您不需要为此做任何代码

您需要在 info.plist 中添加 “基于视图控制器的状态栏外观” 键,如下所示: 在此处输入图片说明

&将其值类型设置为 Boolean&值设置为 NO。然后单击项目设置,然后单击 “常规” 选项卡,然后在 “部署信息” 下将首选状态栏样式设置为. Light,如下所示:

在此处输入图片说明

而已。

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    …
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    …
}

此功能适用于 2013 年 9 月 18 日发布的 Golden Master iOS 7 和 Xcode 5 GM 种子以及 iOS7 SDK(至少隐藏了导航控制器):

  1. Info.plist the UIViewControllerBasedStatusBarAppearance设置为NO

  2. ViewDidLoad方法中或您想在其中更改状态栏样式的任何位置: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

如果您的 UIViewController 在 UINavigationController 内部,则必须设置 BarStyle:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

原始答案在这里

https://devforums.apple.com/message/844264#844264