嵌入的UIViewController高度约束能否突破容器视图限制?
解决容器视图的约束异常问题
看起来你遇到的是Autolayout约束不完整导致的警告/错误标记,咱们一步步拆解问题:
问题根源
你给容器视图设置的约束是水平居中、宽度等于父视图、底部对齐,这三个约束只确定了容器的水平位置、宽度和底部的Y坐标,但完全没定义它的高度——Autolayout根本不知道这个容器该从底部往上延伸多高,自然会抛出约束缺失或者歧义的异常。
而你给子视图控制器的视图设置的高度200,虽然子视图自己的高度是确定的,但容器视图的高度没和子视图关联起来,所以容器的高度依然是不确定状态。
修复方案
这里有两种简单的解决方式,选哪种看你的需求:
方案一:直接给容器视图加高度约束
既然子视图的高度固定是200,那直接给容器视图添加一个高度=200的约束就好。这样容器的大小(宽等于父视图,高200)完全确定,子视图的约束也能完美匹配,Autolayout就不会再有异议了。方案二:让容器视图的高度被子视图驱动
如果你以后可能要修改子视图的高度,不想硬编码容器的高度,可以给容器视图添加约束,让它的顶部和底部分别与子视图的顶部、底部对齐,同时保留水平居中、宽度等于父视图的约束。这样容器的高度会自动跟随子视图的高度变化,灵活性更高。
额外检查点
别忘了确认子视图控制器的视图约束是否正确:你设置的水平居中、垂直居中、宽度等于容器、高度=200是没问题的,只要容器的大小确定,这些约束就能正常工作。
内容的提问来源于stack exchange,提问作者Travis Griggs
相关产品推荐
相关产品推荐

