我有一个垂直包含两个视图的视图。假设上视图是A,下视图是B,B包含水平的2视图。假设他们是B-1和B-2。所以看起来
|------------------|
| A |
| |
|------------------|
| B | (There is no margin around B-1 and B-2)
||-------||-------||
|| B-1 || B-2 || (B-1 and B-2 has intrinsic content size)
||-------||-------||
|----------------- |我想让A的高度更大,只要B1和B2能显示它们的内容(通过AutoLayout)。B-1和B-2的高度可能不同,所以我必须将B的高度设置为两者的更大的高度。
我的第一个想法是返回B的内在大小,在B的intrinsicContentSize方法中,我可以计算哪个尺寸更大,并返回它的大小。
它似乎在工作,但我觉得有点尴尬,因为如果我添加另一个视图,如B-3,我必须重写代码。我想编写一个干净的AutoLayout约束来满足需求。
有什么更好的解决方案可以通过AutoLayout解决吗?
发布于 2015-10-17 23:01:31
你还没说过当B-1和B-2有不同的高度时,它们是如何垂直排列的。例如,它们可能都是顶对齐的,都是垂直中心的,都是底部对齐的,或者是其他什么的。
无论如何,通常的方法是直接指定规则:
我已经选择了B-1和B-2顶部对齐。这是通过前两个约束实现的。接下来的两个,确保B足够高,以显示他们两个的全部高度。约束5确保B不高于所需的高度。约束6到8使A和B垂直相邻并填充superview。
当然,您也需要水平约束,但我认为您可以处理这个问题。
您应该而不是让B计算一个内部内容大小。容器视图的大小不是固有的,而是外部的。它来自于其他事物的大小,而不是它自己的(非视图)内容。
发布于 2015-10-17 22:58:53
有两种选择:
>=和==约束。对于选项2,==约束的优先级必须低于>=约束。例如:
"B“将占据B1和B2的最大高度。
https://stackoverflow.com/questions/33192148
复制相似问题