自定义标签栏(如带透明胶片的容器视图)未设置底部布局指南

时间:2016-02-25 11:13:50

标签: ios uiviewcontroller autolayout uikit

我想创建一个自定义容器视图控制器,其行为与半透明标签栏非常相似。在我的故事板中,我有类似的东西:

Storyboard with container view[1]

问题

容器视图中的内容在标签栏按钮视图下展开以获得半透明效果。但是,因为这不是标准的标签栏UIKit未在子控制器中设置bottomLayoutGuide,默认情况下为0

结果是,当存在滚动视图时,内部子控制器没有正确设置内容上的插入,因此内容的最后几个像素被覆盖通过tababar视图。

脏溶液

我知道我可以制作一个自定义解决方案,我在子视图控制器中手动更改contentInset,但由于有多个子节点,这将非常麻烦。此外,这个自定义tabbar将动画输入/输出,并且可能具有不同的大小,因此这种方法非常复杂,并且与子控制器的关系非常紧密。 从子级到tabbar布局的大量额外代码和依赖项!

我想要实现的目标

如果我使用标准标签栏,内容将正确显示,因为系统使用bottomLayoutGuide向内部滚动框添加插入内容。

我想以某种方式使用我的自定义标签栏执行相同的操作,因此无需更改我的子控制器代码中的任何其他内容(并使它们更少依赖于标签栏的内部),因此我可以参考通常,InterfaceBuilder的布局边距,无论哪个是容器视图。

作为额外的好处,这种方法可以让我在动画输入/输出或更改标签栏大小时更改bottomLayoutGuide,只需要再次询问子视图。

我尝试了什么

我在tabBar和子控制器的bottomLayoutGuide上尝试了不同的操作。我尝试过的一些例子是:

bottomLayoutGuide.heightAnchor.constraintEqualToConstant(40) bottomLayoutGuide.topAnchor.constraintEqualToAnchor(tabBarView.topAnchor)

我还试图打电话给view.setNeedsUpdateConstraints()以防万一,但无论我做什么bottomLayoutGuide.length似乎总是返回0.0

我也看到视图现在有一个layoutMarginsGuide,但它似乎不是一回事。

问题

  • 为什么bottomLayoutGuide始终为0 ?我在这里错过了什么吗?
  • 有谁知道如何以优雅的方式解决这个问题?问题的任何其他干净的方法

谢谢!

0 个答案:

没有答案