如何根据字符串大小在UITableViewCell中动态设置UITextView的高度?
我知道这里已经提出了这个问题,但它没有解决我的问题,因为接受的答案中的链接已关闭,最小的例子没有帮助。
这是我的自定义UITableViewCell及其所有约束的图片:
每个post都包含这些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的高度?
———————————编辑1 ————— ——————
在图片中犯了一个错误, messageView
的高度未设置
使用自动布局动态调整单元格大小时,您实际上不需要实现sizeThatFits(...)
。 如果约束设置正确,那么您只需要禁用UITextView
的滚动。
来自代码:
yourTextView.scrollEnabled = false
来自IB:
选择文本视图并打开属性检查器 ,然后
在Attributes Inspector中,选择您的UITextView(messageView)
并取消选中“Scrolling Enabled”。
然后更改您的UITextView(messageView)'s
内容压缩抵抗优先级,如下所示:Horizontal = 750 Vertical = 1000
我希望这能帮到您。
只是禁用UITextview滚动…但这里没有使用UITextview,你也可以使用标签。
在HeightForRow tableview委托方法中删除那些东西并使用
return UITableViewAutomaticDimension
您已经使用约束来使单元格高度动态
形成苹果文档
要定义单元格的高度,您需要一个完整的约束链和视图(具有已定义的高度)来填充内容视图的上边缘和下边缘之间的区域。
所以对于你的情况你需要
cell的高度= 120 + messageView的高度?
因此,从Profile Image开始,从顶部到底部测量不间断的约束链
-
个人资料图片top = 10 + ImageHeight = 60 —-> 70
-
MessageView top = 10 +设置消息的最小高度说20行一行如果每个单元格都应该有消息,即使一个单词并设置此高度大于或等于20 ,请确保设置Scroll enable = false所以消息Height minimum = 10 top + 20 + 10底—> 40
-
菜单堆栈视图高度—> 30
因此所有总数= 70 + 40 + 30 = 140这个默认高度没有单元格会小于此值
您还必须将表视图的rowHeight属性设置为UITableViewAutomaticDimension
。 您还必须为estimatedRowHeight
属性分配值
tableView.estimatedRowHeight = 130.0 tableView.rowHeight = UITableViewAutomaticDimension
这是苹果文档