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

Kju*_*uly 65 cocoa-touch uikit ios ios7

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

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

Kju*_*uly 190

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

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    
    Run Code Online (Sandbox Code Playgroud)

    -application:didFinishLaunchingWithOptions:了AppDelegate.m的.


注意:UIStatusBarStyleDefault是状态栏样式的默认值,它将显示黑色内容.这两个UIStatusBarStyleBlackTranslucent&UIStatusBarStyleBlackOpaque在iOS 7.0中已弃用.


适用于iOS 9的更新:

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

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

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

有是也有两个方法-childViewControllerForStatusBarStyle:-childViewControllerForStatusBarHidden只要你想从子视图控制器返回首选风格.

例如,如果您使用以下方法

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
Run Code Online (Sandbox Code Playgroud)

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

- (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);
}
Run Code Online (Sandbox Code Playgroud)

现在更新解决方案.

  • 只有一个提示:如果你在-application中设置它,你可以使用应用程序而不是[UIApplication sharedApplication]:didFinishLaunchingWithOptions: (5认同)
  • 注意:因为在应用程序加载之前不会调用`application:didFinishLaunchingWithOptions`,这将*不*改变启动屏幕上状态栏的颜色. (2认同)

Sat*_*ito 68

在*-Info.plist文件中:

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

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

  • 出类拔萃,非常感谢.随着iOS 9.0中setStatusBarStyle的弃用,这绝对是天赐之物. (2认同)

Den*_*hov 26

我在主控制器中使用它:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
Run Code Online (Sandbox Code Playgroud)


NaX*_*Xir 14

将这两个键放在info.plist中

在此输入图像描述


Har*_*kar 9

这里有一个简短的解决方案来设置状态栏颜色白色

1)首先将此行复制View controller-based status bar appearance到.plist文件中并设置布尔值NO;

2)在didFinishLaunchingWithOptions下的AppDelegate.m文件中粘贴此内容

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
Run Code Online (Sandbox Code Playgroud)

或者添加.plist

在此输入图像描述


小智 6

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

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
Run Code Online (Sandbox Code Playgroud)


Ara*_*ini 5

    #ifdef __IPHONE_7_0
    # define STATUS_STYLE UIStatusBarStyleLightContent
    #else
    # define STATUS_STYLE UIStatusBarStyleBlackTranslucent
    #endif

    [[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
Run Code Online (Sandbox Code Playgroud)


Raj*_*shu 5

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Run Code Online (Sandbox Code Playgroud)

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

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

等待设置statusBarStyle在您的应用程序使用默认的基于UIViewController的状态栏系统时不执行任何操作.为了这

在info.list文件中将"查看基于控制器的状态栏外观"设置为NO