在iOS 7启动画面中更改状态栏文字颜色

99

我知道已经有一些stackoverflow上的问题说明如何更改所有视图控制器的状态栏。我目前是用以下方法更改状态栏的颜色:

if(IS_IOS7)
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

application:DidFinishLaunching 方法中,此外,我已经在 plist 中将 UIViewControllerBasedStatusBarAppearance 的值更改为 NO。然而,在启动画面仍然显示带有黑色文本的状态栏文本。

是否可能在启动画面中更改状态栏文本颜色?


“你说的‘仍然显示黑色状态栏’是什么意思?”:如果您的代码正确,状态栏字体应为白色,状态栏背景色取决于您的启动图像(现在应该包括状态栏高度-20个像素)。 - Vinzzz
抱歉,我错过了文本词。我只是改变状态栏的文本颜色。启动画面发生后,我可以更改它,但在启动画面进行时却无法更改它。 - Tiago Almeida
6个回答

226
在项目的plist文件中添加“状态栏样式”属性(键为UIStatusBarStyle)。然后忽略此属性下拉列表中列出的所有可能值并输入UIStatusBarStyleLightContent。您不需要在plist中将UIViewControllerBasedStatusBarAppearance设置为NO,而是可以将所需的preferredStatusBarStyle设置为您的视图控制器。

有没有办法使其与 iOS 6 上的有色状态栏兼容? - Rafael Nobre
1
状态栏的文本颜色可以是白色或黑色。状态栏的背景来自启动图像,如果视图控制器扩展到栏下方,则来自视图控制器的视图。 - Vinzzz
1
经过大量尝试,这个方法终于奏效了(将UIViewControllerBasedStatusBarAppearance设置为NO)。你是一个英雄。 - Tamás Sengel
你也可以通过代码 UIApplication.sharedApplication().statusBarStyle = .LightContent 来实现这个功能。我在AppDelegate中实现它。 - Yasmin Tiomkin
@Yasmin:在启动画面之后更改颜色的解决方案已经包含在问题中了 ;) - Vinzzz
我已将UIViewControllerBasedStatusBarAppearance设置为YES,但它不起作用。iOS 8.4 Xcode 6.4。我真的需要在我的项目中将其设置为YES。 - Van Du Tran

33

无需编写任何代码即可完成此操作。
按照以下步骤使整个应用程序的状态栏文本颜色为白色。

在您的项目plist文件中:

  • 状态栏样式:UIStatusBarStyleLightContent
  • 基于视图控制器的状态栏外观:NO
  • 状态栏最初隐藏:NO

被接受的答案很好,但是如果不执行上面第二个步骤,它在我的所有视图控制器上都无法正常工作。谢谢! - Clifton Labrum
基于视图控制器的状态栏外观:YES 仍然可以解决问题(iOS 9)。 - Nicolas Miari

19
您可以通过以下步骤使整个应用程序的状态栏呈现浅色:
  1. 在项目导航器中选择项目名称。
  2. 从项目编辑器左侧列出的列表中选择目标名称。
  3. 单击项目编辑器顶部的“General”选项卡。
  4. 设置“Status Bar Style”为 “Light”。

在您的 plist 文件中添加以下值:

  1. 状态栏样式 - UIStatusBarStyleLightContent
  2. 基于视图控制器的状态栏外观 - NO
这将帮助您在应用程序中包括闪屏界面,将状态栏设置为白色。

7

在plist文件中将UIViewControllerBasedStatusBarAppearance设置为No。

然后在did finish launch选项中添加以下代码:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {

   [application setStatusBarStyle:UIStatusBarStyleLightContent];

    self.window.clipsToBounds =YES;

    self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
}

请按照以下代码进行操作,对我很有效:

请遵循此代码,它对我有效。


我的状态栏显示白色文本,而我的背景也很浅。我该如何显示黑色文本? - Mangesh
在目标上,前往常规设置,您将有一个选项来设置状态栏样式。 - Preejith augustine
你其实可以使用点语法来更简单地编写第一行,像这样:if (UIDevice.currentDevice.systemVersion.floatValue >= 7) { - Todd Lehman

2

这里是Apple指南/说明关于状态栏更改的内容。

以下是 - 如何更改状态栏样式:

如果您想要设置应用程序级别的状态栏样式,请在您的`.plist'文件中将UIViewControllerBasedStatusBarAppearance设置为NO

如果您想要在视图控制器级别上设置状态栏样式,请按照以下步骤操作:

  1. 如果您只需要在UIViewController级别上设置状态栏样式,请在.plist文件中将UIViewControllerBasedStatusBarAppearance设置为YES
  2. 在viewDidLoad中添加函数- setNeedsStatusBarAppearanceUpdate

  3. 覆盖您的视图控制器中的preferredStatusBarStyle。

-

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

根据状态栏样式设置级别设置.plist的值。 输入图像描述


您可以在应用程序启动期间或在视图控制器的viewDidLoad期间为状态栏设置背景颜色。

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        return true
    }
}


or 
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
    }

}



这是结果:

enter image description here


1
你可以通过以下方式在整个应用程序中获得浅色状态栏。
1. 在项目导航器中选择项目名称。 2. 在项目编辑器左侧列出的列表中选择一个目标名称。 3. 点击项目编辑器顶部的“常规”选项卡。 4. 设置状态栏样式为“浅色”。

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