如何更改模态视图 iOS 6 上的状态栏
Posted
技术标签:
【中文标题】如何更改模态视图 iOS 6 上的状态栏【英文标题】:How to change Statusbar on Modal Views iOS 6 【发布时间】:2012-09-12 19:43:24 【问题描述】:我有以下星座:
主视图(自定义 UIViewController,没有导航控制器或导航栏),包含一个按钮,该按钮模态地连接到第二个表视图控制器,该控制器嵌入在导航控制器中:
MainView -> 导航控制器 -> TableView
在 MainView 上,状态栏为黑色(ios 6 没有变化 - 即使状态栏设置为默认) 在 TableViewController 上,状态栏应具有默认样式(iOS 5 中为灰色,iOS 6 中导航栏为蓝色)。
在 iOS 5 中,这很容易通过 TableViewController 中的以下代码行来实现:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarStyle:)])
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
在 iOS 6 下运行这个会发生。我怎样才能做到这一点?我在项目摘要和 plist 中尝试了所有可能的状态栏设置(如下所述:https://***.com/a/12468689/1685971)
此外,在 Storyboard 中,一切看起来都很好。在模拟器或设备上运行应用程序,它看起来不同:
【问题讨论】:
【参考方案1】:试试这个“黑客”: 您必须将导航栏添加到您的第一个视图控制器。那么你有两种可能。
1) 设置导航栏的alpha值为0
或
2) 将栏的 y 位置设置为 -43px(看这里:http://moduscreate.com/tinting-your-status-bar-in-ios6-and-phonegap/)
编辑:
要获得正确的颜色,您必须设置不可见 UINavigationBar 的 tintColor。所以默认设置为黑色。在您的按钮操作中,您必须将 tintColor 设置为您的 navigationController.navigationBar.tintColor。在关闭按钮的操作中,您需要将其设置回 [UIColor blackColor]。
【讨论】:
imo 功能状态栏着色没有被 Apple 干净地实现。您的解决方案是一种解决方法。干净的解决方案应该是应用程序检查每个视图控制器上的状态栏色调 - 不仅在第一个视图控制器上。【参考方案2】:第一个视图控制器必须有一个导航控制器/栏,该功能才能工作。 状态栏不会在整个应用程序中改变颜色(在 iOS6 中),但会适应您开始视图的导航栏颜色。如果您的起始视图不包含导航栏,则状态栏不会调整颜色。! (见http://i.stack.imgur.com/n9ubK.png)
【讨论】:
是的,这个新功能选择顶部导航栏的颜色来为状态栏着色。但这里的要求是,第一个 View Controller 没有导航栏。在 iOS 5 中,这可以通过上面的代码实现。但在 iOS 6 中,状态栏是不可更改的! 在 TableViewController 上,状态栏应该有默认样式(iOS 5 中为灰色,iOS 6 中导航栏为蓝色)。 这个假设是错误的。 上面显示的代码将 TableViewController 上的状态栏设置为默认样式。这适用于 iOS5 - 不适用于 iOS6(状态栏保持黑色 - 请参阅模拟器屏幕截图)。【参考方案3】:您不必将导航栏的样式设置为您的 tableviewcontroller。
试试这个方法。 1. 将导航控制器添加到主视图。 2. 将其属性 hidden 设置为 yes。 3.显示tableviewcontroller时,设置导航栏属性hidden为No
导航控制器->隐藏栏=是-> MainView -> bar hidden=no -> TableView
【讨论】:
问题是 TableViewController 是模态显示的。因此 MainViewController 和 TableViewController 不能嵌入到同一个导航控制器中(请参阅故事板屏幕截图)。当使用两个导航控制器(一个用于 MainView,一个用于 TableView)时,上面描述的问题保持不变......以上是关于如何更改模态视图 iOS 6 上的状态栏的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7:模态视图控制器状态栏颜色错误,但普通视图控制器正确