如何更改iOS 7中的状态栏文字颜色

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

  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 } 

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

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

注意:此方法在iOS9中已被弃用。 改为使用UIViewController上的preferredStatusBarStyle 。 (请参阅Apple开发者库 )

你可以在不写任何代码的情况下做到这一点!
通过整个应用程序执行以下操作使状态栏文本颜色变为白色

对你项目plist文件:

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

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

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

在AppDelegate中添加

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

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

此解决scheme适用于iOS 7/8

对于我来说,在其他答案(以及其他来源/文档)中使用所有的东西并没有什么事情发生。 有帮助的是在XIB中将导航栏样式设置为“黑色”。 这改变了文本为白色,没有任何代码。

在这里输入图像说明

这些都不是我的工作,所以这里是一个工作的解决scheme…

Info.plist ,添加一行:

UIViewControllerBasedStatusBarAppearance ,并设置值NO

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

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

你不需要为此做任何代码

您需要在info.plist中添加“基于控制器的状态栏外观”button,如下所示: 在这里输入图像描述

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

在这里输入图像描述

而已。

只有两个步骤如下:

步骤1:

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

UIViewControllerBasedStatusBarAppearance ,设置值NO

第2步:

在项目AppDelegate.m

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

这在2013年9月18日发布的Golden Master iOS 7和Xcode 5 GM种子和iOS7 SDK(至less在隐藏导航控制器的情况下)可用:

  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

如果您有通过Interface Builder创build的embedded式导航控制器,请务必在pipe理您的导航控制器的类中设置以下内容:

 -(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; } 

这应该是你需要的一切。

我正在Swift项目上使用Xcode 6 beta 5,用于iOS 7应用程序。

这是我做的,它的工作原理:

info.plist中:

在这里输入图像说明

在AppDelegate.m中,添加以下内容。

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

在Plist文件中,将“基于控制器的状态栏外观”设置为NO。

只需在Appdelegate

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

那么,这对我来说真的很像一块蛋糕。

转到您应用的info.plist

  1. View controller-based status bar appearanceNO
  2. Status bar style UIStatusBarStyleLightContentUIStatusBarStyleLightContent

然后去你的应用程序的委托,并粘贴在你设置你的Windows的RootViewController的以下代码。

 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)]; view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0]; [self.window.rootViewController.view addSubview:view]; } 

答对了。 它为我工作。

  1. 转到Project – > Target

  2. 然后将Status Bar Style设置为Light 。 它使状态栏从启动屏幕变成白色。 项目设置

  3. 然后在Info.plist中将View controller-based status bar appearanceNO

iOS 7允许单独的视图控制器确定状态栏的外观,如Apple开发者文档所述:

iOS 7使得视图控制器能够在应用程序运行时调整状态栏的风格。 dynamic更改状态栏样式的一个好方法是实现preferredStatusBarStyle并在animation块内更新状态栏外观并调用setNeedsStatusBarAppearanceUpdate

全局设置状态栏外观是一个两步过程。

首先,你需要告诉iOS你不想在一个视图的基础上设置状态栏的外观。

那么你需要负责,实际设置新的全局状态栏的风格。

要禁用视图状态栏控件,您需要在Info.plist设置基于View controller-based status bar appearance属性。

打开Project Navigator并selectiOS应用程序的项目,然后selectInfo选项卡。

将鼠标hover在一行上,然后单击出现的加号,将新属性添加到您的.plist

在Key字段中inputView controller-based status bar appearance ,然后确保Type字段设置为Boolean 。 最后,在“值”字段中input“ NO ”。

要为状态栏设置全局样式,请在“信息”选项卡下添加另一个属性,使用Status bar style ,“ Stringtypes”和“ Opaque black style值”的键。

这里有一个更详细的一些博客文章和一些示例代码:

http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/

为Xcode GM种子更新的答案:

  1. Info.plistView controller-based status bar appearanceNO

  2. 在该项目中,设置:

    在这里输入图像说明

  3. 在ViewDidLoad中:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

更改信息PLIST 在Swift 3中很简单,只需2步。 转到您的info.plist并将View controller-based status bar appearance更改为“NO”。 然后在Appdelegate中,只需在didfinishlaunchingwithoptions方法中添加此行即可

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. UIApplication.shared.statusBarStyle = .lightContent return true } 

没有必要做一些额外的事情,只需在你的viewController中写下这个代码,并获得状态栏颜色白色

 - (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;} 

我认为所有的答案都没有真正指出问题,因为他们都在特定的情况下工作。 但是,如果您需要涵盖所有情况,请遵循以下几点:

根据你所需要的状态栏的灯光风格,你应该始终牢记这三点:

1)如果你需要启动屏幕或其他地方的状态栏,在那里你不能控制它(不是在视图控制器,而是像启动屏幕一些系统控制的元素/时刻),你去你的项目设置 项目设置

2)如果导航控制器内有控制器您可以在界面构build器中更改它,如下所示:

a)select导航控制器的导航栏 选择导航控制器的导航栏

b)然后将导航栏的样式设置为“黑色”,因为这意味着您的状态栏下会出现“黑色” – >黑色背景,因此会将状态栏设置为白色

在这里输入图像描述

或者在代码中做如下

 navigationController?.navigationBar.barStyle = UIBarStyle.Black 

3)如果你只有控制器需要它自己的状态栏风格,并没有embedded到一些容器结构作为UINavigationController

在代码中为控制器设置状态栏样式:

在代码中设置状态栏样式

只需打电话

 [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; 

在里面

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

我的AppDelegate方法在iOS7中非常适合我。

这在iOS 7 UI过渡指南中有logging ,您需要Apple开发人员ID才能直接访问。 相关摘录:

因为状态栏是透明的,所以它后面的视图显示出来。 […]使用UIStatusBarStyle常量来指定状态栏内容是否应该暗或亮:

UIStatusBarStyleDefault显示黑暗的内容。 […]

UIStatusBarStyleLightContent显示灯光内容。 当黑暗的内容在状态栏后面时使用。

也可能感兴趣:

在iOS 7中,您可以从单独的vew控制器控制状态栏的样式,并在应用程序运行时对其进行更改。 要select此行为,请将UIViewControllerBasedStatusBarAppearance键添加到应用程序的Info.plist文件中,并将值YES

我肯定会推荐浏览一下这个文档,同样,你可以使用你的Apple开发者ID来访问它。

如果你想要与Swift相同的结果,你可以在你的AppDelegate.swift文件中使用这个代码:

 UINavigationBar.appearance().barStyle = .BlackTranslucent 

而你的状态栏的文本将是白色的:-)!

我做了一些不同的事情,这对我有用。

在代码中没有改变,我没有configuration我的.plist文件,如下所示:

  • 查看基于控制器的状态栏外观> NO
  • 状态栏样式> UIStatusBarStyleLightContent(简单string)

我希望它有帮助。

编辑

对于每个视图控制器,我将故事板中的“状态栏”的Simulated Metrics属性从“推断”更改为“Light Content”

在info.plist中设置字段值NO在目标>常规设置中查看基于控制器的状态栏外观并设置状态栏样式灯。

让我给你一个完整的答案你的问题。 更改状态栏的文字颜色是非常容易的,但在iOS 7中有点混乱,特别是新手。

如果您试图通过select视图控制器并转到右侧的模拟度量标准,在故事板中将颜色从黑色更改为白色,则无法正常工作,我不知道为什么。 它应该像这样改变,但是如何改变。

其次,你不会在你的plist中findUIViewControllerBasedStatusBarAppearance属性,但默认情况下它不在那里。 您必须通过点击+button来添加它,然后将其设置为NO。

ios 7状态栏文字颜色

最后,你必须去你的AppDelegate.m文件,并在didFinishLaunchingWithOptions方法中添加以下内容,添加以下行:

  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

这会将所有视图控制器的颜色更改为白色。 希望这可以帮助!

如果您仍然希望在info.plist中将View controller-based status bar appearance设置为YES,这意味着您可以更改每个视图控制器的状态栏,请在ViewDidLoad的状态栏中使用以下白色文本:

 [[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent]; 

总结一下,编辑你的项目Info.plist并添加:

View controller-based status bar appearanceNO

Status bar styleOpaque black style

或者如果你有原始的键/值plist

UIViewControllerBasedStatusBarAppearanceNO

UIStatusBarStyleOpaque black style

使这项工作的关键是只有全屏视图控制器才能指定状态栏的样式。

如果您使用的是导航控制器,并且想要以每个视图控制器为基础控制状态栏,那么您需要inheritanceUINavigationController并实现preferredStatusBarStyle,以便返回topViewController的首选项。

确保将你的故事板场景中的类引用从UINavigationController更改为你的子类(例如下面的示例中的MyNavigationController)。

(下面的例子适用于我,如果你的应用程序是基于TabBar的,你可能想通过inheritanceUITabBarController来做类似的事情,但是我没有试过)。

 @interface MyNavigationController : UINavigationController @end @implementation MyNavigationController - (UIStatusBarStyle)preferredStatusBarStyle { return self.topViewController.preferredStatusBarStyle; } @end