繁体   English   中英

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

[英]How to set status bar's content color to white on iOS 7

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

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

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

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

    to -application:didFinishLaunchingWithOptions: AppDelegate.m。


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


适用于iOS 9的更新:

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

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

您可以调用UIViewController的实例方法-setNeedsStatusBarAppearanceUpdate一次值改变-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);
}

现在更新解决方案。

在* -Info.plist文件中:

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

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

我在主控制器中使用它:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

将这两个键放在info.plist中

在此输入图像描述

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

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

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

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

或者添加.plist

在此输入图像描述

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

[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];

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

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

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

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

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

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

self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
  }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM