66

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

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

4

10 回答 10

189
  1. info.list文件中将“查看基于控制器的状态栏外观”设置为NO ;
  2. 插入

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    -application:didFinishLaunchingWithOptions:AppDelegate.m。


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


iOS 9 更新:

正如@ZakariaDarwish 所提到的,该方法-setStatusBarStyle在iOS 9 中已弃用。(注意:最初的问题是很久以前针对iOS 7 提出的,我现在不支持它,下面的新解决方案适用于我在iOS 9 下,因此更新这里。)

因此,剩下的唯一方法(至少现在)是-preferredStatusBarStyle在您的视图控制器中实现(记住将“基于视图控制器的状态栏外观”设置回YES)。

一旦在或中-setNeedsStatusBarAppearanceUpdate更改值,您就可以调用 UIViewController 的实例方法。-preferredStatusBarStyle-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);
}

现在为这个更新的解决方案。

于 2013-09-23T07:31:10.110 回答
70

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

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

或者,您可以在目标的常规选项卡中将状态栏样式指定为“黑色不透明”或“黑色半透明”。(在 Xcode 5.0.1 中)但它们是过时的值。

于 2013-11-13T05:46:23.127 回答
26

我在主控制器中使用它:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
于 2013-09-23T07:38:37.670 回答
14

将这两个键放在info.plist

在此处输入图像描述

于 2015-08-22T10:34:17.903 回答
9

这是设置状态栏颜色白色的简短解决方案

1)首先将此行复制View controller-based status bar appearance到您的 .plist 文件中并设置 Boolean NO

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

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

或添加 .plist

在此处输入图像描述

于 2015-10-24T07:33:43.227 回答
6

iOS 9(不推荐使用的警告解决方法)

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
于 2015-11-20T13:48:49.953 回答
5
    #ifdef __IPHONE_7_0
    # define STATUS_STYLE UIStatusBarStyleLightContent
    #else
    # define STATUS_STYLE UIStatusBarStyleBlackTranslucent
    #endif

    [[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
于 2013-11-27T07:44:41.157 回答
5

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

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

于 2017-02-22T11:24:03.237 回答
4

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

self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
于 2014-08-13T16:36:46.120 回答
2

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
  }

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

于 2016-10-07T20:59:44.470 回答