我知道这个问题已经被问到here,但它没有解决我的问题,因为接受的答案中的链接已关闭,而最小的例子没有帮助。
这是我的自定义UITableViewCell&的图片。所有限制因素:
每个帖子都包含这些UI元素。唯一可以使每个单元格高度不同的元素是messageView
,因为它的高度取决于显示的字符串。问题是,如何动态设置每个单元格的高度?这就是我现在所拥有的(不起作用,messageView
根本没有显示):
func cellForRowAt(indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(...) as! PostCell
let message = ...
cell.messageView.text = message
return cell
}
func heightForRowAt(indexPath: IndexPath) -> CGFloat {
var cellMinimumHeight: CGFloat = 120
if let cell = tableView.cellForRow(at: indexPath) as? PostCell {
let size = cell.messageView.sizeThatFits(cell.messageView.frame.size)
cellMinimumHeight += size.height
}
return cellMinimumHeight
}
在heightForRowAt
函数中,if
未被执行,因此,所有单元格的高度均为cellMinimumHeight = 120
。
如何让每个单元格的高度= 120 + messageView的高度?
--------------------------------- EDIT 1 --------- ------------------------
图片中出错,messageView
的高度未设置
答案 0 :(得分:4)
使用自动布局动态调整单元格大小时,您并不需要实现sizeThatFits(...)
。如果正确设置了约束,则只需禁用UITextView
的滚动。
yourTextView.scrollEnabled = false
选择文本视图并打开属性检查器,然后
答案 1 :(得分:1)
在属性检查器中选择您的UITextView(messageView)
并取消选中"滚动已启用"。
然后更改您的UITextView(messageView)'s
内容压缩抵抗优先级,如下所示:
水平= 750
垂直= 1000
我希望这会对你有所帮助。
答案 2 :(得分:1)
只需禁用UITextview滚动... 但是这里没有使用UITextview,你也可以使用标签。
在HeightForRow tableview委托方法中删除那些东西并使用
return UITableViewAutomaticDimension
答案 3 :(得分:1)
您已使用约束来使单元格高度动态
表单Apple文档
要定义单元格的高度,您需要一个完整的约束链 和视图(具有定义的高度)来填充内容之间的区域 视图的上边缘和下边缘。
因此,对于您的情况,您需要
单元格的高度= 120 + messageView的高度?
首先从Profile Image开始,从上到下测量不间断的约束链
个人资料图片top = 10 + ImageHeight = 60 ---->的 70 强>
MessageView top = 10 +设置消息的最小高度,如果每个单元格应该有消息,即使一个单词并设置此高度大于或等于20 ,则设置20行一行确保你设置Scroll enable = false 所以消息高度最小= 10顶+ 20 + 10底---> 40 强>
菜单堆栈视图高度---> 30
所以所有总数= 70 + 40 + 30 = 140这个默认高度没有单元格会小于这个
此外,您必须将表视图的rowHeight属性设置为UITableViewAutomaticDimension
。您还必须为estimatedRowHeight
属性
tableView.estimatedRowHeight = 130.0
tableView.rowHeight = UITableViewAutomaticDimension
以下是Apple文档Here