我们如何在 iOS 9 中为整个应用程序设置状态栏的 Light Content 样式?

Posted

技术标签:

【中文标题】我们如何在 iOS 9 中为整个应用程序设置状态栏的 Light Content 样式?【英文标题】:How we can set the Light Content style of Status Bar in iOS 9 for whole application? 【发布时间】:2015-12-20 05:14:44 【问题描述】:

我想将 Light Content 样式应用于整个应用程序。

以下方法在 ios 9 中已弃用,没有替换方法。

-setStatusBarStyle:动画:

设置状态栏的样式,可选择动画过渡 到新的风格。

正在AppDelegate 工作,例如:

Swift 1.2 代码:

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

但是当我将我的项目升级到 iOS 9/Swift 2 时,他们会向我发出警告消息:

<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
<Error>: CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
<Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

所以根据apple forum 和这个答案CGContextSaveGState: invalid context 0x0 Error only on device 的解决方案

因此,我已根据解决方案从info.plist 文件中删除了属性UIViewControllerBasedStatusBarAppearance

现在的情况是如何在iOS 9中为整个应用设置状态栏的Light Content样式?

来自论坛:

我不想为每个视图设置 Light Content。

有什么建议吗?

Objective-C 应该有同样的问题。

【问题讨论】:

你在使用 UINavigationController 吗? 【参考方案1】:

您还可以使用: UIApplication.shared.statusBarStyle = .lightContent。它也适用于 swift3。

【讨论】:

它应该仍然可以工作,但我相信它已被弃用。 在 swift3 中它可以工作,我正在我当前的项目中使用它。 iOS 9.0 已弃用 developer.apple.com/documentation/uikit/uiapplication/…【参考方案2】:

通过使用 UINavigationController 并将其导航栏的 barStyle 设置为 .Black,您可以节省大量工作。您只需执行一次;您可以在情节提要编辑器中完成。

只要此 UINavigationController 处于命令状态,这将自动将您的状态栏样式转换为 .LightContent

【讨论】:

感谢您的回答,我会检查并通知您。 在这种情况下,您需要将整个界面放入一个自定义的父容器视图控制器中,该控制器用作整个应用程序的根视图控制器,并实现preferredStatusBarStyle。要么就这样,要么硬着头皮在各处实施preferredStatusBarStyle 好的。谢谢你。请用此声明更新答案。因此,任何人都可以从您的回答中获得帮助。 [[UINavigationBar 外观] setBarStyle:UIBarStyleBlack]; 对于那些使用 splitView 控制器的人,请确保在该控制器上设置了 preferredBarStyle ...

以上是关于我们如何在 iOS 9 中为整个应用程序设置状态栏的 Light Content 样式?的主要内容,如果未能解决你的问题,请参考以下文章

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

iOS状态栏的管理

iOS状态栏的管理

如何在 IOS 7 的 cordova 2.9.0 中删除状态栏?

状态栏整个视图向下移动 - iOS 11

iOS 9.0 设置状态栏颜色 和隐藏