内容查看AutoLayout

时间:2015-07-27 21:19:43

标签: ios xcode swift autolayout

我正在尝试向项目添加容器视图,并且在自动布局方面遇到问题。在这个容器视图中,我将它子类化为某种类型的UIViewController,我将其命名为ContainerViewController。我试图在堆栈溢出时找到这个,所以如果它已经发布,请道歉。无论如何,从这个视图控制器,我试图实现类似于this的效果,其中标签基本上附加到ContainerViewController(红色视图)视图的底部,并且水平居中于此。但是,每当我尝试这样做时(我以编程方式执行此操作),一切都变得混乱。我将容器视图的边缘附加到UILabel(全部为零),并将顶部附加到矩形。我已经尝试在-prepareforsegue方法中设置childviewcontroller,我已经尝试更改缩放因子,我已经尝试使容器视图固定大小,我已经尝试将授权因素设置为灵活,我已经尝试了几乎我能想到的一切我并不接近解决方案。当我设置视图的背景颜色时,它的工作原理应该如下:背景颜色变为红色,就像上面的例子一样,它应该是空间的大小。

问题:我在-viewdidload方法的ContainerViewController视图中添加了一个UILabel,发现ContainerViewController的视图与我正在使用的大小屏幕完全相同,并且UILabel附加到{{3但是我只能看到容器屏幕的视图边界。所以ContainerViewController的视图不尊重容器视图的边界。如果我需要更好地解释这个问题,或者您有任何问题请告诉我。非常感谢任何帮助,谢谢!

TLDR:正在发生的事情是容器视图具有自动布局的正确约束,并且仅显示其边界中发生的情况。但是,containerView中的UIViewController有一个不尊重容器视图边界的视图;就好像uiviewcontroller的视图大小与屏幕的主视图一样。

1 个答案:

答案 0 :(得分:0)

我相信你基本上已经解决了这个问题:你手动添加到容器视图中的视图不会像你期望的那样自动将自己约束到它的父级(我自己错误地做了这个假设)。您需要使用程序化自动布局将边显式绑定到父容器视图控制器。

我最终使用PureLayout来解决这个问题。 See this answer to my own question了解更多详情。

[newView autoPinEdgesToSuperviewEdgesWithInsets:UIEdgeInsetsZero];