我正面临使用自动布局自动调整单元格大小的问题.我的目标是实现一个看起来像这样的表:
| Title_label (time) $price |
| |
|Some long description. More |
|description. |
| |
Run Code Online (Sandbox Code Playgroud)
当标题很长时,它应该如下所示:
| This title is (time) $price |
| really long |
| |
|Some long description. More |
|description. |
| |
Run Code Online (Sandbox Code Playgroud)
因此,当标题变得更大时,只要时间和价格有8个点空间,它就会将时间标签推向右侧.如果它更大,它应该换到下一行.
我在表格视图之前已经完成了自定尺寸单元格,但只有一个扩展标签,而不是两个.
我已经实现了行的自动高度:
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 100
Run Code Online (Sandbox Code Playgroud)
这就是我的约束的样子:
| 8px
|8px title 8px time >=8px price|
| 8px |
|8px description 8px|
| 8px |
Run Code Online (Sandbox Code Playgroud)
价格时间和头衔之间也存在最重要的一致性.
我将标题和描述的行号设置为0.我将时间和价格的抗压力设置为1000(因为标题与它们重叠).
但是标题标签不会换行到下一行.它结束于....更多描述标签也太小了.当我滚动表时,desription的高度是固定的.
我在尝试返回cell之前尝试添加cell.layoutIfNeeded().然后单元格布局搞砸了(标题被剪裁),但是当我滚动tV时一切正常.
有任何想法吗?
编辑:这是因为标题标签旁边是其他标签,它不知道什么时候应该换行?
我试过了
override func layoutSubviews() {
self.nameLabel.preferredMaxLayoutWidth -= (durationLabel.frame.width + priceLabel.frame.width + 16)
super.layoutSubviews()
}
Run Code Online (Sandbox Code Playgroud)
告诉标题标签它的最大宽度是多少,但它会让事情变得混乱.
就像你一样,我已将标题和描述的行设置为 0,并且我已将你的单元格设置为如下所示:
| 8px
|8px title 8px time >=8px price|
| 8px |
|8px description 8px|
| 8px |
Run Code Online (Sandbox Code Playgroud)
然后,我设置了压缩和拥抱属性:
标题:
时间:
价格:
描述:
一切都按预期进行
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |