我们如何在 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 样式?的主要内容,如果未能解决你的问题,请参考以下文章