指定视图大小何时取决于多个子视图的约束

Posted

技术标签:

【中文标题】指定视图大小何时取决于多个子视图的约束【英文标题】:Constraints to specify when view size is dependent on multiple subviews 【发布时间】:2014-03-04 12:56:08 【问题描述】:

我在UITableView 中使用自定义单元格。单元格中有 4 个视图。 3 个UILabels 和1 个UIImageView(灰色一个),如下图所示。标签的文本是动态的,因此宽度和高度是动态的。

UIImageView 的宽度取决于 2 个标签。所以问题是指定标签和UIImageView 之间的约束,这将决定UIImageView 的宽度。

看看下面如果第一个标签的文本很长会发生什么。

当宽度取决于多个标签的宽度时如何指定约束?

更新:我尝试将标签的行数设置为 0,将固有大小设置为占位符。它也不起作用。下面是它的外观。我尝试将固有宽度和高度设置为无,但是当我对两个标签都这样做时会出错,如果只为一个标签设置则不会出错。

更新:我更改了属性,下面显示了它们现在是什么以及单元格的显示方式。

单元格:

第一行标签的约束(粉红色):

第二行标签的约束(青色):

【问题讨论】:

您是在 IB 中还是在代码中设置约束? 如果在 IB 中,您需要将标签的行数设置为 0,并在 Size Inspector 中将 Intrinsic Size 设置为占位符。这样,标签的大小和行数将在运行时根据内容计算出来。 显然关注这个帖子***.com/questions/18746929/…。但我已经在那里见过你了。 @MartinKoles 我将尝试更改行数和内在大小。你能解释一下为什么要将固有大小设置为占位符吗? 看到这个***.com/questions/19677142/… 【参考方案1】:

我在尝试了很多东西后解决了这个问题。我唯一要做的就是将水平和垂直内容压缩阻力优先级设置为必需。即1000。 我对所有标签都这样做了,因为我不希望任何标签修剪它们的内容。

另外一件非常重要的事情是获得正确的单元格高度。如果在计算自定义单元格的高度时甚至出现 1pt 的错误,它将不会按预期显示。

提示:

    如果任何视图的高度大于预期,则可能计算出的单元格高度大于实际需要的高度。 如果任何视图垂直缩小或不显示全部内容,则可能计算出的单元格高度小于实际需要的高度。

Yoy 可以通过向您为单元格计算的高度(变量)添加/删除常数值来测试高度是否错误。

【讨论】:

以上是关于指定视图大小何时取决于多个子视图的约束的主要内容,如果未能解决你的问题,请参考以下文章

根据子视图的内容大小调整滚动视图

当父级的大小减小时,哪些自动布局约束允许子视图压缩到 0 大小?

当父容器视图约束以编程方式更改时,UINavigationController 子视图不调整大小

如何将间距约束指定为超级视图大小的比例?

如果我的子视图的大小与其父视图相同,如何使用 ctrl-drag 在 IB 中设置约束?

在不自动调整大小的情况下确定 UIView 容器大小