具有多个标签的自我调整大小的单元格不显示多行标签
Posted
技术标签:
【中文标题】具有多个标签的自我调整大小的单元格不显示多行标签【英文标题】:Self sizing cell with multiple labels does not show multiline label 【发布时间】:2015-11-16 22:10:44 【问题描述】:我的静态表格视图单元格中有三个标签,中间的标签应该是多行的。
我在viewDidLoad()
中设置这两行
self.tableView.estimatedRowHeight = 130.0
self.tableView.rowHeight = UITableViewAutomaticDimension
故事板是这样的
这里是每个子视图的约束
顶部标签、中间标签、底部标签、按钮
我还将中间标签的行数设置为 0。但是它只显示一行,而不是多行。我想这一定与内容拥抱或内容压缩优先级有关,或者是因为我正在使用带有静态单元格的UITableViewController
。
更新
如果我将中间标签的 Vertical Compression Resistance Priority 更改为 751,将 Vertical Content Hugging Priority 更改为 250,标签会显示多行,但单元格不会调整大小,因此顶部和底部标签现在位于单元格之外。
更新 2
我刚刚创建了一个示例项目,结果证明它可以按预期使用动态单元格,但不适用于静态单元格。您可以在这里下载示例项目:https://dl.dropboxusercontent.com/u/67692950/ResizingCell.zip
【问题讨论】:
您是否正在寻找一种方法来使标签尽可能高以显示所有行? @luk2302 是的,以自动方式 你可能想看看this question and its answers 恐怕这些答案对于 ios 8 和自调整单元格来说已经过时了 中间标签的换行方式是否设置为“自动换行”? 【参考方案1】:我克隆了您的示例项目。我认为问题在于您不需要设置 UITableViewCell 的高度。
这是一个简单的解决方案。
・在表格视图单元格中设置行高“默认”。(未选中的自定义)
在这种情况下,它可以工作。
下载我在这里实现的示例项目: https://www.dropbox.com/s/w8q6ov9qjfxu1l3/ResizingCell.zip?dl=0
但另一种方法是根据 UILabel 的高度计算 UITableViewCell 的高度。
如果自定义单元格比较复杂,最好将单元格隔离为自定义单元格。
【讨论】:
设置底部标签为多行标签时不起作用。 @pixyzehn 我需要帮助【参考方案2】:首先,打开storyboard,设置tableview行高为100,取消tableview单元格的自定义行高,当前值为100。
其次,就像@DBoyer 所说,请致电layoutIfNeeded
。如果您看到“无法同时满足约束,将尝试通过破坏约束 X 来恢复”,将 X 的优先级降低到 999。我认为警告可能与您获得单元格时有关,单元格框架为 CGRectZero
。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath)
cell.layoutIfNeeded()
return cell
【讨论】:
【参考方案3】:您需要在设置多行标签文本后在单元格上调用layoutIfNeeded
或设置标签preferredMaxLayoutWidth
【讨论】:
这是一个带有静态单元格的UITableViewController
,所以我不能直接在单元格上调用它,preferredMaxLayoutWidth
应该在 iOS 8 中自动完成
@user1463853 可以直接调用,直接覆盖tableView:willDisplayCell:
【参考方案4】:
对标签使用 aspectRatio 约束。它的目的是根据需要改变宽度和高度。这将有所帮助
【讨论】:
以上是关于具有多个标签的自我调整大小的单元格不显示多行标签的主要内容,如果未能解决你的问题,请参考以下文章
给定具有多行标签的集合视图单元格的宽度,如何获得首选的 AutoLayout 高度?