iOS 8浅色状态栏无法正常工作

9
我已将视图控制器中主UIView的背景颜色设置为蓝色。
我也尝试了以下所有组合:
- 在应用程序委托中添加以下内容: ``` UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true) ``` - 根据应用程序将视图控制器状态设置为NO或YES - 在项目概述中将“状态栏样式”设置为Light。
当我想要看到白色文本时,我看到黑色状态栏文本。
我想在应用程序级别而不是VC级别设置样式。
我的Info.plist:
4个回答

15

适用于所有IOS 9+版本

在您的plist文件中,使用以下2行代码添加或修改表格。

1)将View controller-based status bar appearance更改为NO

2)将Status bar style更改为UIStatusBarStyleLightContent

输入图像描述

如果您希望出于任何原因在运行的应用程序中更改样式,请使用此方法。

 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

这个东西救了我无数次命!:-)


这个截图来自哪里?我希望它能更大一些,以便展示它是从哪里被拍摄的。 - coolcool1994
从您在Xcode项目根目录中的info.plist文件中。 - Pan Mluvčí

10

默认情况下,状态栏样式由视图控制器而非应用程序确定。在您的视图控制器中实现preferredStatusBarStyle

class ViewController : UIViewController {
    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
    }
}

您可以在应用程序级别确定状态栏样式,但要这样做,必须在您的 Info.plist 中切换。请参阅文档

要退出基于视图控制器的状态栏外观行为,您必须向应用程序的 Info.plist 文件添加一个值为 NO 的 UIViewControllerBasedStatusBarAppearance 键,但不建议这样做 [我的斜体显示,我甚至不知道是否仍然支持]。


我重写的是一个函数吗? - Max Hudson
理想情况下,对于所有VC来说都应该是相同的,我只需要在一个地方进行设置。 - Max Hudson
然后,您需要打开 Info.plist 开关,以允许您在应用程序级别进行设置。 - matt
我更新了我的问题。你的个人VC代码确实使文本变白,但我想要一个应用程序级别的解决方案。 - Max Hudson
5
顺便提一下,这个方法在嵌入到UINavigationController或其他容器类的视图控制器上不起作用,因为该容器会覆盖所有子视图控制器。给你的UINavigationController一个自定义类,在该类中定义一个方法,从第一个视图控制器中获取preferredStatusBarStyle,像这样:override func preferredStatusBarStyle() -> UIStatusBarStyle { return self.navigationController!.viewControllers.first.preferredStatusBarStyle() } - Alejandro Iván
显示剩余4条评论

2

Swift 4

Info.plist 文件中添加以下属性:

View controller-based status bar appearance to NO

然后,在 AppDelegate 中的 didFinishLaunchingWithOptions 方法中添加以下代码:

UIApplication.shared.isStatusBarHidden = false

UIApplication.shared.statusBarStyle = .lightContent


我不认为这是Swift 4,但它现在仍然可以工作。 - Ben

1
你可以使用这段代码。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

可能会解决这个问题。

请考虑编辑您的帖子,添加更多关于代码功能和为什么它能解决问题的解释。即使代码能够正常工作,但如果回答大部分只包含代码而没有解释,则通常无法帮助OP理解他们的问题。同时,强烈建议不要发表猜测性质的回答。一个好的答案应该有一个合理的理由,说明它为什么能够解决OP的问题。 - SuperBiasedMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接