如何在iOS 7上将状态栏的内容颜色设置为白色

我的应用程序的背景颜色是黑色的。 导致整个视图在iOS 7的状态栏下方,状态栏上的内容将难以区分。 那么如何将状态栏的内容颜色更改为白色呢?

我尝试了preferredStatusBarStyle和其他几种方法,但失败了。

  1. 在你的info.list文件中将 “基于视图控制器的状态栏外观”设置为NO ;
  2.  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

    -application:didFinishLaunchingWithOptions: :。


注意UIStatusBarStyleDefault是状态栏样式的默认值,它将显示黑色内容。 UIStatusBarStyleBlackTranslucentUIStatusBarStyleBlackOpaque都在iOS 7.0中被弃用。


更新为iOS 9:

作为@ZakariaDarwish提到,在iOS 9中已经废弃了-setStatusBarStyle方法。(注意:原来的问题很早以前就被问到了iOS 7,现在我不支持它,下面的新解决scheme适用于iOS 9下的我,因此在这里更新。)

所以,唯一的办法就是在你的视图控制器中实现-preferredStatusBarStyle (记得把“基于视图控制器的状态栏外观”设置回YES )。

一旦在-preferredStatusBarStyle-prefersStatusBarHidden更改了值,就可以调用UIViewController的实例方法-prefersStatusBarHidden

还有两个方法-childViewControllerForStatusBarStyle-childViewControllerForStatusBarHidden可以根据需要从子视图控制器返回首选样式。

例如 ,如果你使用下面的方法

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; 

在切换状态栏的样式之前,可以使用下面的代码示例

 - (void)shouldChangeStatusBarStyleToLightContent:(BOOL)toLightContent animated:(BOOL)animated { _shouldChangeStatusBarStyleToLightContent = toLightContent; if (animated) { [UIView animateWithDuration:.3f animations:^{ [self setNeedsStatusBarAppearanceUpdate]; }]; } else { [self setNeedsStatusBarAppearanceUpdate]; } } - (UIStatusBarStyle)preferredStatusBarStyle { return (_shouldChangeStatusBarStyleToLightContent ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault); } 

现在更新这个解决scheme。

在你的* -Info.plist文件中:

  1. 将“查看基于控制器的状态栏外观”设置为NO
  2. 将“状态栏样式”设置为UIStatusBarStyleLightContent

另外,你可以在Target的General选项卡中指定状态栏的样式为“Black Opaque”或“Black Translucent”(在Xcode 5.0.1中),但是它们已经过时了。

我在主控制器中使用这个:

 - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } 

将这两个键放在info.plist中

在这里输入图像说明

这里简短的解决scheme设置状态栏的颜色为白色

1)首先复制这一行在你的.plist文件中View controller-based status bar appearance并设置布尔NO ;

2)在didFinishLaunchingWithOptions下的AppDelegate.m文件中粘贴这个

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; [[UIApplication sharedApplication] setStatusBarHidden:NO]; 

或者添加.plist

在这里输入图像说明

iOS 9(不build议使用的警告解决方法)

 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; 
  #ifdef __IPHONE_7_0 # define STATUS_STYLE UIStatusBarStyleLightContent #else # define STATUS_STYLE UIStatusBarStyleBlackTranslucent #endif [[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES]; 

只是一个说明,因为这是在那里。 如果您使用的是UINavigationController,则可以将其引入视图控制器的viewDidLoad方法中:

 self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; 

如果您的应用程序具有不同的状态栏的每个视图控制器的内容颜色,首选的方法将实施

 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 

如果您需要在整个应用程序中全局更改栏的内容颜色,请在AppDelegate中的didFinishLaunchingWithOptions方法中添加以下代码行

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

如果你的应用程序使用默认的基于UIViewController的状态栏系统,等待设置statusBarStyle什么也不做。 为了这

在你的info.list文件中将“基于视图控制器的状态栏外观”设置为NO

要在Swift 3中以编程方式执行此操作,请在视图控制器中的任何位置尝试。

 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 

我还将plist键“查看基于控制器的状态栏外观”设置为YES。