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


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


926
2017-07-16 14:11


起源


此链接有关于此问题的有趣信息: doubleencore.com/2013/09/... - Adriano Lucas


答案:


  1. 设置 UIViewControllerBasedStatusBarAppearance 至 YES 在.plist文件中。

  2. 在里面 viewDidLoad 做一个 [self setNeedsStatusBarAppearanceUpdate]; 

  3. 添加以下方法:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }
    

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

斯威夫特3  - 这将在内部控制器 UINavigationController。在控制器中添加此代码。

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

1310
2017-07-21 03:36



我不需要第2步。 - Jason Moore
似乎没有使用Xcode5-DP5在iOS 7 Beta 5上运行。似乎没有调用preferredStatusBarStyle。 - wilsontgh
UIViewControllerBasedStatusBarAppearance更改为在Xcode 5 GM种子中查看基于控制器的状态栏外观 - parilogic
得到了Xcode GM Seed的答案:1。在Info.plist中,将基于View控制器的状态栏外观设置为NO 2.在appDelegate中,在appDidFinishLaunching方法中,放置[[UIView appearance] setTintColor:[UIColor whiteColor]]; - parilogic
UINavigationController的 是一个特例,以上都行不通。花了好几个小时在我身上挠头。请看这里的解决方案: stackoverflow.com/a/19513714/505457 - Tyson


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

  1. View controller-based status bar appearance 至 NO 在你的 Info.plist
  2. 呼叫 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

注意:此方法已在iOS9中弃用。使用 preferredStatusBarStyle 而是在UIViewController上。 (看到 Apple开发者库


841
2017-08-12 10:35



这是一个更好,更容易的路线。 - Mick Byrne
对我不起作用。 - Dmitry
无需编码。它可以通过plist完成:(1)将“View controller-based status bar appearance”设置为NO,(2)将“Status bar style”设置为“Opaque black style”。 (原始值为UIViewControllerBasedStatusBarAppearance - > NO和UIStatusBarStyle - > UIStatusBarStyleBlackOpaque) - SwiftArchitect
@gothicdev:很好的抓住。会接受你的答案,因为它是最干净的。 Bar Style的Light选项可以是:UIStatusBarStyleLightContent - benka
此方法已在iOS 9中弃用。 - lostAtSeaJoshua


你可以这样做而无需编写任何代码!
执行以下操作以使状态栏文本颜色在整个应用程序中变为白色

在你身上 项目plist 文件:

  • 状态栏样式: Transparent black style (alpha of 0.5)
  • 查看基于控制器的状态栏外观: NO
  • 状态栏最初是隐藏的: NO

432
2017-09-11 04:47



我不知道是否有变化,但XCode无法识别UIStatusBarStyleLightContent值,并且在任何文档中都找不到......虽然它似乎有效。 - Nathan H
这绝对适合我。 - 1110
这个也在启动画面上改变了它,而只是在导航器上设置它不会......荣誉! - viniciusnz
没有任何东西叫做 UIStatusBarStyleLightContent 在里面 plist info 但是有 Transparent Black 这将做同样的技巧:)加上,你需要添加 View controller-based status bar appearance 因为它不是最初的,它是你需要的所有工作:) - user1949873
对于像我这样懒惰的人,复制和过去: <key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/> - Adam Waite


注意:大多数upvoted答案不适用于iOS 7/8 

在Info.plist中,将“查看基于控制器的状态栏外观”设置为NO

在AppDelegate中添加

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   ......
   ...
}    

此解决方案适用于iOS 7/8


241
2017-09-23 05:11



好的解决方案它也适用于iOS8。 - Brandon Yang
在iOS 9中不推荐使用: - / - sudo make install


对我来说,在其他答案(以及其他来源/文档)中使用所有内容时没有任何反应。帮助是在XIB中将导航栏样式设置为“黑色”。这将文本更改为白色而没有任何代码。

Enter image description here


107
2017-09-12 16:42



在设备中,上面的答案都没有对我有用,但是这个。我认为它告诉您必须设置的新系统的所有内容 导航栏 有黑色的 状态栏 文字白色。 - MrTJ
不适合我。 - JohnK
在经历了很多事情之后,这就结束了。样式设置为默认值。改变了这一点,并删除了所有其他状态栏黑客,它的工作原理。 - Gujamin
如果您不想在IB中设置所有导航栏,您还可以设置其外观代理。 [[UINavigationBar外观] setBarStyle:UIBarStyleBlack]; - Steve Moser
在iOS7 Storyboard中对我不起作用。看起来这可能是副作用的其他东西? - Chris


这些都不适合我,所以这是一个有效的解决方案......

Info.plist,添加一行:

UIViewControllerBasedStatusBarAppearance,并设置值 NO

然后在AppDelegate中 didFinishLaunchingWithOptions,添加这些行:

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

95
2017-12-29 11:28



这个解决方案适合我,而上面的解决方案没有。 - John Contarino
真棒,但这个UIViewControllerBasedStatusBarAppearance转换为相同:基于控制器的状态栏外观自动:) - Abhishek Thapliyal


你不需要为此做任何代码

您需要在info.plist中添加“查看基于控制器的状态栏外观”键,如下所示: enter image description here

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

enter image description here

而已。


53
2018-02-09 09:00



我喜欢你的方法!就我而言,我试图找出如何使状态栏样式在全屏(没有导航栏)时变亮。然后,我意识到所有其他屏幕应该适合相同的灯光风格。所以一个好的解决方案是设置整个事物。谢谢! (: - Igor de Lorenzi
如果您在应用程序运行时无需更改此设置。这是最好的方法。 - Michael
这种方法肯定有效,但它在iPad上引入了一个奇怪的问题。如果您的应用程序支持深层链接,并且当您通过深层链接启动应用程序时,状态栏上显示的反向链接将消失。 - Chitranshu Asthana
最好也是最简单的一个。 - Amit
使用Xcode 9.4.1。 - chengsam


只需两个步骤如下:

步骤1:

在“信息”选项卡下 project target,添加行:

UIViewControllerBasedStatusBarAppearance, 设定值 NO

第2步:

在项目中 AppDelegate.m

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

48
2017-12-21 13:55



我喜欢这个答案,这是我第一次使用“应用程序”参数)) - MUH Mobile Inc.
这对我来说很有魅力...... - Fahim Parkar
点符号,它将是完美的;) - Rivera
这是正确的答案!谢谢。 - diogo.appDev
这工作得很好................谢谢 - Muralikrishna


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

  1. the UIViewControllerBasedStatusBarAppearance 至 NO 在里面 Info.plist

  2. ViewDidLoad 方法或任何地方,你想在哪里改变 状态栏样式: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];


42
2017-09-13 08:28



UIViewControllerBasedStatusBarAppearance默认值似乎是YES。 “应用程序默认使用基于视图控制器的新状态栏管理系统。要退出此选项,请将UIViewControllerBasedStatusBarAppearance键的值NO添加到Info.plist。” [bgr.com/2013/09/10/ios-7-gm-change-log-release-notes/] - Zsolt
Ya !!将UIViewControllerBasedStatusBarAppearance设置为NO后,状态栏会隐藏在视图中。 - CashLee李秉骏
它应该应用于所有viewdidload吗? - Arnlee Vizcayno
您可以在appDelegates didFinishLoading方法中添加它。或者在第一个视图中查看viewDidLoad方法,如果您不希望它更改。 - Deniss Fedotovs
很棒,这个人完成了这项工作。简单而优秀的编码。 - Felipe