在启动屏幕iOS 7中更改状态栏文本颜色


98

我知道这已经是一些stackoverflow 问题,它们说明如何更改所有视图控制器的状态栏。我目前正在以这种方式更改状态栏的颜色:

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

在里面 application:DidFinishLaunching

此外,我UIViewControllerBasedStatusBarAppearance将plist中的值更改为NO。但是,在初始屏幕中,静止图像会以黑色显示状态栏文本。

是否可以在初始屏幕中更改状态栏文本颜色的颜色?


您的意思是“它仍显示状态栏为黑色”:如果您的代码有效,则状态栏字体应为白色,状态栏背景色取决于您的启动图像(现在应包括状态栏高度-20像素)
Vinzzz 2013年

抱歉,我真的很想念文字。我仅更改状态栏的文本颜色。启动画面发生后,我可以更改它,但启动画面发生时,我不能更改它。
Tiago Almeida 2013年

Answers:


224

在项目plist文件中,添加“状态栏样式”属性(键为UIStatusBarStyle)。然后忽略此属性下拉列表中列出的所有可能值,然后键入UIStatusBarStyleLightContent

而且您不必在plist中设置UIViewControllerBasedStatusBarAppearanceNO,您可以将所需的设置为preferredStatusBarStyle视图控制器。


有什么方法可以使其与iOS 6上的着色状态栏兼容?
拉斐尔·诺布雷2013年

1
状态栏的文本颜色为白色或黑色。条形图的背景来自启动图像,如果它在条形图下方延伸,则来自viewController的视图。
Vinzzz

1
经过大量的不同方法后,这一工作终于完成了(将UIViewControllerBasedStatusBarAppearance设置为NO)。你是英雄。
塔玛斯·森格尔2014年

您也可以通过代码UIApplication.sharedApplication()。statusBarStyle = .LightContent来执行此操作。我在AppDelegate中做到了
Yasmin Tiomkin 2015年

@Yasmin:要在启动屏幕后更改颜色,此解决方案已经成为问题的一部分;)
Vinzzz 2015年

33

您可以执行此操作而无需编写任何代码行
执行以下操作,以使整个应用程序中的状态栏文本为白色

在您的项目plist文件中:

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

可接受的答案很好,但是如果不执行上面的第二项,它就不能在我所有的视图控制器上运行。谢谢!
克利夫顿Labrum

“基于视图控制器的状态栏外观:YES”似乎仍然可以解决问题(iOS 9)
Nicolas Miari 2015年

19

您可以执行以下操作来获取整个应用程序中的浅色状态栏。

  1. 在项目导航器中选择项目的名称。
  2. 从项目编辑器左栏中的列表中选择目标的名称。
  3. 单击项目编辑器顶部的“常规”。
  4. 设置状态栏样式->灯光

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

  1. 状态栏样式-UIStatusBarStyleLightContent
  2. 基于视图控制器的状态栏外观-否

这将帮助您在整个应用程序(包括SPLASH SCREEN)中获得白色的状态栏。


7

UIViewControllerBasedStatusBarAppearanceplist中的设置为No

然后在完成启动选项中添加以下代码

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 2013年

目标上的Mangesh进入常规设置,在那里您可以选择设置状态栏样式
Preejith augustine 2013年

您实际上可以使用点语法来编写第一行,如下所示: if (UIDevice.currentDevice.systemVersion.floatValue >= 7) {
Todd Lehman

2

这是有关状态栏更改的Apple准则/说明

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

如果要设置状态栏样式,请在“ .plist”文件中将应用程序级别设置UIViewControllerBasedStatusBarAppearanceNO

如果要设置状态栏样式,请在视图控制器级别执行以下步骤:

  1. 设置UIViewControllerBasedStatusBarAppearanceYES.plist文件,如果需要设置状态栏样式仅UIViewController的水平。
  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
    }

}



结果如下:

在此处输入图片说明


1

您可以执行以下操作来获取整个应用程序中的浅色状态栏。

在项目导航器中选择项目的名称。从项目编辑器左栏中的列表中选择目标的名称。单击项目编辑器顶部的“常规”。设置状态栏样式->灯光

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.