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


当前回答

总结一下,编辑你的项目信息。Plist并添加:

基于视图控制器的状态栏外观:NO

状态栏样式:不透明的黑色样式

或者如果你有raw key/value plist

uiviewcontrollerbasedstatusbar外观:NO

UIStatusBarStyle:不透明黑色风格

其他回答

删除。plist文件中基于视图控制器的状态栏外观(如果你有create)并重新创建它。 设置状态栏样式为不透明黑色样式

在appDelegate中,在didFinishLaunching下添加以下代码。

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

不需要做一些额外的,只是写这段代码在你的viewController和获得状态栏颜色白色

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}

对我来说,什么都没用。我试图改变状态栏颜色在ViewController2,这是嵌入在NavigationController,这反过来,从ViewController1被模态地呈现。这种方法行不通:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .darkContent
}

什么都没有发生,直到我找到了这个解决方案: 将这一行添加到ViewController1

导航控制器。modalPresentationCapturesStatusBarAppearance = 真正的

let navigationController = UINavigationController(rootViewController: viewController2)
navigationController.modalPresentationStyle = .overFullScreen
navigationController.modalTransitionStyle = .crossDissolve           
navigationController.modalPresentationCapturesStatusBarAppearance = true
self.present(navigationController, animated: true)

所以如果你的导航方案类似于ViewController1呈现的ViewController2,尝试modalPresentationCapturesStatusBarAppearance属性呈现的一个

文档:

The default value of this property is false. When you present a view controller by calling the present(_:animated:completion:) method, status bar appearance control is transferred from the presenting to the presented view controller only if the presented controller's modalPresentationStyle value is UIModalPresentationStyle.fullScreen. By setting this property to true, you specify the presented view controller controls status bar appearance, even though presented non-fullscreen. The system ignores this property’s value for a view controller presented fullscreen.

在Swift 3非常简单,只需2步。 去你的信息。将基于视图控制器的状态栏外观更改为“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
    }

这在iOS9中已经被弃用,现在你应该在rootviewcontroller中重写这个属性

这样做在iOS 9中已经被弃用,应该在rootviewcontroller上这样做

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
 }

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

ios7允许视图控制器在应用程序运行时调整状态栏的样式。动态改变状态栏样式的一个好方法是实现preferredStatusBarStyle并在一个动画块内更新状态栏外观并调用setNeedsStatusBarAppearanceUpdate。

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

首先,你需要告诉iOS你不想按视图来设置状态栏外观。

然后你需要负责并实际设置新的全局状态栏样式。

要禁用逐视图状态栏控件,您需要在Info.plist中设置基于视图控制器的状态栏外观属性。

打开项目导航器,选择iOS应用程序的项目,然后选择信息选项卡。

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

在Key字段中输入基于视图控制器的状态栏外观,然后确保Type字段设置为Boolean。最后,在Value字段中输入NO。

要为状态栏设置全局样式,在Info选项卡下添加另一个属性,键为状态栏样式,类型为字符串,值为不透明黑色样式。

下面是一篇博客文章,其中有更多的细节和一些示例代码:

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