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

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

当在我的Info.plist中使用View controller-based status bar appearance = YES启用应用程序的状态栏时,它表现正常,根UIViewController显示您所期望的状态栏。

然而,它会导致容器视图中的UITabBarController将我的视图内容向下推动20个像素,在我的选项卡栏视图顶部留下一个间隙,以表示它认为状态栏应该在那里。

但是,当然,状态栏并没有显示在那里,因为它通常显示在屏幕顶部。因此,它实际上只是在我的容器视图中添加了一个间隙。


你是否正在使用自动布局和约束? - rvijay007
是的,我是。所有工作都在故事板中完成。 - Josh Kahane
你能否发布带有tabbarcontroller和它的viewcontroller的故事板照片,左侧完全展开的约束条件? - rvijay007
3个回答

7
原来,topLayoutGuide 由于期望状态栏的存在会向下推我的视图20像素。因为需要状态栏,topLayoutGuide 添加了这20像素的空间。
在我的故事板中,视图控制器的最上层子视图与我的视图顶部有一个固定约束。这个约束是 view top 等于 topLayoutGuide bottom
这意味着当 topLayoutGuide 添加了20像素的空间时,整个视图都会被偏移。
通过将约束更改为固定到 topLayoutGuide top,所创建的空间现在只是坐在我的普通子视图下面,不会引起任何问题。

1
我也遇到过这个问题。问题在于,无论哪个视图在您的选项卡栏控制器中,都有一个与控制器顶部匹配的约束条件,该约束条件匹配到顶部布局指南。容器视图中选项卡控制器的顶部布局指南仍将具有长度为20的值。一种有效的解决方案是删除此约束条件,并使视图与父视图控制器视图的顶部相同,或将高度/居中-Y-至容器大小与父视图控制器的视图相同(父视图是选项卡中的视图控制器,而不是您嵌入选项卡栏控制器的视图控制器)。
TabBarController -> RootViewController -> RootVCView -> subview
使subview.height == RootVCView.height,并且subview.centerY == rootVCView.centerY。
这仅适用于只有一个子视图的简单情况,您需要对具有顶部约束条件的任何子视图执行此操作。在不了解更多关于您的故事板布局的情况下,这是我能提供的最佳解决方案。希望能有所帮助!

感谢rvijay007。虽然你的解决方案不完全符合要求,但它指引了我正确的方向。我没有想到topLayoutGuide。我已经留下了我的答案,问题已经解决,谢谢! - Josh Kahane

0
添加约束条件时,针对容器视图请勿使用“topLayoutGuide”,而是使用“Top Space To:” ,这样可以解决问题。

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