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

Ang*_*qui 7 uiviewcontroller uikit ios autolayout

我想创建一个自定义容器视图控制器,其行为与半透明tabbar非常相似.在我的故事板中,我有这样的事情:

带有容器视图的故事板[1]

问题

容器视图中的内容在tabbar按钮视图下展开,以显示半透明效果.但是,因为这不是标准的tabbar,UIKit所以没有bottomLayoutGuide在子控制器中设置,默认情况下0.

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

脏的解决方案

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

我想要实现的目标

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

我想以某种方式执行与我的自定义标签栏同样的动作,所以没有必要改变任何东西在我的孩子控制器代码(让他们更少地依赖于标签栏的内部),所以我可以引用布局边距通常来自InterfaceBuilder,无论哪个是容器视图.

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

我试过了什么

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

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

而且我也试着打电话view.setNeedsUpdateConstraints()以防万一,但不管我做什么bottomLayoutGuide.length似乎总是回来0.0.

我也看到现在的观点有一个,layoutMarginsGuide但似乎并不是一回事.

问题

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

谢谢!