首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AutoLayout中以较大的高度作为父级高度

如何在AutoLayout中以较大的高度作为父级高度
EN

Stack Overflow用户
提问于 2015-10-17 22:14:54
回答 2查看 62关注 0票数 0

我有一个垂直包含两个视图的视图。假设上视图是A,下视图是B,B包含水平的2视图。假设他们是B-1和B-2。所以看起来

代码语言:javascript
复制
  |------------------|
  |    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解决吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-17 23:01:31

你还没说过当B-1和B-2有不同的高度时,它们是如何垂直排列的。例如,它们可能都是顶对齐的,都是垂直中心的,都是底部对齐的,或者是其他什么的。

无论如何,通常的方法是直接指定规则:

  1. B.top == B1.top
  2. B.top == B2.top
  3. B1.底部<= B.bottom
  4. B2.底部<= B.bottom
  5. B.height == 0@优先级200
  6. superview.top == A.top
  7. A.bottom == B.top
  8. B.bottom == superview.bottom

我已经选择了B-1和B-2顶部对齐。这是通过前两个约束实现的。接下来的两个,确保B足够高,以显示他们两个的全部高度。约束5确保B不高于所需的高度。约束6到8使A和B垂直相邻并填充superview。

当然,您也需要水平约束,但我认为您可以处理这个问题。

您应该而不是让B计算一个内部内容大小。容器视图的大小不是固有的,而是外部的。它来自于其他事物的大小,而不是它自己的(非视图)内容。

票数 1
EN

Stack Overflow用户

发布于 2015-10-17 22:58:53

有两种选择:

  1. 在B1和B2之间设置等高约束。他们都会取两个视图之间最大的内在高度的高度。
  2. 使用一对>===约束。

对于选项2,==约束的优先级必须低于>=约束。例如:

  • B1:容器== 0@ 250优先级的顶部空间
  • B1:容器>= 0@ 1000优先级的顶部空间
  • B2:容器== 0@ 250优先级的顶部空间
  • B2:容器>= 0@ 1000优先级的顶部空间

"B“将占据B1和B2的最大高度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33192148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档