自动布局:具有可变高度和两个标签的表格单元格

Posted

技术标签:

【中文标题】自动布局:具有可变高度和两个标签的表格单元格【英文标题】:Autolayout: table cell with variable height and two labels 【发布时间】:2015-05-17 16:23:30 【问题描述】:

我遇到了一些高级自动布局主题,需要您的帮助。

我有一个简单的自定义表格单元格,标签固定在左侧,一个固定在右侧,非常简单:

现在,我希望左侧标签始终位于左上角,高一行,并根据内容缩放其宽度,最大为可用空间的 50%(如果内容多于此,我希望它被点切断):

我希望右侧标签始终位于右上角,向左增长直到到达左侧标签的右边框。根据左侧标签的宽度,右侧标签可能会变宽或变薄:

现在,如果内容不适合右标签,我希望它使用几行来改变单元格的大小,但仍然尊重左标签的大小:

我知道如何让标签自动增长表格单元格,但我不知道如何正确配置左右标签之间的关系。

谁能帮我解决这个问题?

非常感谢!

【问题讨论】:

【参考方案1】:

您需要以下约束:

leftLabel 的宽度约束表明它应该小于或等于父视图的width / 2。将此约束的优先级设为1000(绝对必需)。 leftLabel 的尾随到 rightLabel 的前导之间的水平间距约束,其优先级低于上述优先级,但仍需要(例如,900)。 使leftLabel的横向内容拥抱优先1000

XIB中第一个约束怎么做:

基本上只是将leftLabel上的Ctrl + left click添加到superview,添加Equal Widths约束,然后将约束修改为<=而不是=。还要修改Multiplier;而不是1,改为1:22:1,其中2 对应于superview 的宽度。

【讨论】:

谢谢!成功了!我只想补充一件事:我无法将“宽度相等”约束设置为标签及其子视图,在我的例子中是表格视图单元格的内容视图。因此,我只是简单地向我的 tableViewCell 添加了另一个 UIView,它在所有四个边框上都具有 0 的约束,并将其余部分添加到这个新视图中作为超级视图。 啊,是的——我忘了​​提,你需要添加额外的“包装”视图,因为你不能直接在单元格的contentView 上设置等宽约束。

以上是关于自动布局:具有可变高度和两个标签的表格单元格的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局表格视图时如何增加表格视图单元格中的标签高度(取决于文本)?

具有动态大小的单元格的复杂自动布局

界面生成器中的自动布局高度 >= 0 帧

表格视图单元格内的图像块并更改自动布局

如何为具有动态高度的表格单元格正确设置自动布局?

滚动时 UITableViewCell 自动布局抖动的动态单元格高度问题