容器视图控制器状态栏 iOS 7

Posted

技术标签:

【中文标题】容器视图控制器状态栏 iOS 7【英文标题】:Container View Controller Status Bar iOS 7 【发布时间】:2014-08-03 19:07:18 【问题描述】:

我遇到了状态栏问题。我有一个UIViewController,它有一个容器视图,其中在UIViewController 中嵌入了一个UITabBarController

当在我的Info.plist 中使用View controller-based status bar appearance = YES 在我的应用中启用状态栏时,它会正常工作,根UIViewController 会按预期显示状态栏。

但是,它导致容器视图中的 UITabBarController 将我的视图内容向下推 20 像素,在我的标签栏视图顶部留下一个它认为状态栏应该在的位置。

当然,状态栏不会显示在那里,因为它显示在屏幕顶部的正常位置。所以它实际上只是在我的容器视图中添加了一个间隙。

【问题讨论】:

你在使用自动布局和约束吗? 是的,我是。这一切都在故事板中完成。 你能用 tabbarcontroller 和它的 viewcontroller 发布你的故事板的照片,约束在左侧完全展开吗? 【参考方案1】:

原来topLayoutGuide 将状态栏的视图向下推了 20 像素。因为它需要一个状态栏,所以topLayoutGuide 添加了这个 20 像素的空间。

在我的故事板中,我的视图控制器的最顶层子视图有一个约束,可以将其固定到我的视图顶部。这个约束是 view top 等于 topLayoutGuide bottom

这意味着当topLayoutGuide 添加 20 像素空间时,我的整个视图被它抵消了。

通过更改约束以修复 topLayoutGuide top,创建的空间现在只是位于我的正常子视图下方,不会造成任何问题。

【讨论】:

【参考方案2】:

我自己也遇到过类似的问题,问题是标签栏控制器中的任何视图都有一个将控制器顶部与 toplayoutguide 匹配的约束。容器视图中选项卡控制器的顶部布局指南的长度仍为 20。一种可行的解决方案是删除此约束,并使视图具有与父视图控制器视图相同的顶部,或者调整高度/中心的大小- y-to-container 与父视图控制器的视图相同(父视图控制器是选项卡中的视图控制器,而不是您嵌入选项卡栏控制器的视图控制器)。

TabBarController --> RootViewController --> RootVCView --> subview

制作subview.height == to RootVCView.heightsubview.centerY == rootVCView.centerY

这是针对您只有一个子视图的简单情况,您需要针对具有顶部约束的子视图执行此操作。在不了解您的故事板布局的情况下,这是我能提供的最佳解决方案。希望对您有所帮助!

【讨论】:

感谢 rvijay007。虽然您的解决方案不符合要求,但它引导我朝着正确的方向前进。我没有想到topLayoutGuide。我已留下答案,已全部解决,谢谢!【参考方案3】:

为您的容器视图添加“Top Space To:”约束而不是“topLayoutGuide”,它将解决问题

【讨论】:

以上是关于容器视图控制器状态栏 iOS 7的主要内容,如果未能解决你的问题,请参考以下文章

让导航栏与iOS 7中的状态栏重叠

iOS 7:模态视图控制器状态栏颜色错误,但普通视图控制器正确

iOS 7 状态栏透明

iOS 7 及更高版本:为每个视图控制器设置状态栏样式

在 ios 7 中呈现模型视图控制器时出现状态栏问题

iOS 7:如何在一个视图控制器中将状态栏文本颜色更改为白色,在第二个视图控制器中更改为黑色?