如何根据字符串大小在UITableViewCell中动态设置UITextView的高度?

时间:2018-05-22 03:10:09

标签: ios swift uitableview

我知道这个问题已经被问到here,但它没有解决我的问题,因为接受的答案中的链接已关闭,而最小的例子没有帮助。

这是我的自定义UITableViewCell&的图片。所有限制因素:

enter image description here

每个帖子都包含这些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的高度未设置

4 个答案:

答案 0 :(得分:4)

使用自动布局动态调整单元格大小时,您并不需要实现sizeThatFits(...)。如果正确设置了约束,则只需禁用UITextView的滚动。

来自代码:

yourTextView.scrollEnabled = false

来自IB:

选择文本视图并打开属性检查器,然后

enter image description here

答案 1 :(得分:1)

在属性检查器中选择您的UITextView(messageView)并取消选中"滚动已启用"。

然后更改您的UITextView(messageView)'s内容压缩抵抗优先级,如下所示: 水平= 750 垂直= 1000

我希望这会对你有所帮助。

答案 2 :(得分:1)

只需禁用UITextview滚动... 但是这里没有使用UITextview,你也可以使用标签。

在HeightForRow tableview委托方法中删除那些东西并使用

return UITableViewAutomaticDimension

答案 3 :(得分:1)

您已使用约束来使单元格高度动态

表单Apple文档

  

要定义单元格的高度,您需要一个完整的约束链   和视图(具有定义的高度)来填充内容之间的区域   视图的上边缘和下边缘。

因此,对于您的情况,您需要

单元格的高度= 120 + messageView的高度?

首先从Profile Image开始,从上到下测量不间断的约束链

  1. 个人资料图片top = 10 + ImageHeight = 60 ---->的 70

  2. MessageView top = 10 +设置消息的最小高度,如果每个单元格应该有消息,即使一个单词并设置此高度大于或等于20 ,则设置20行一行确保你设置Scroll enable = false 所以消息高度最小= 10顶+ 20 + 10底---> 40

  3. 菜单堆栈视图高度---> 30

  4. 所以所有总数= 70 + 40 + 30 = 140这个默认高度没有单元格会小于这个

    此外,您必须将表视图的rowHeight属性设置为UITableViewAutomaticDimension。您还必须为estimatedRowHeight属性

    指定值
    tableView.estimatedRowHeight = 130.0
    tableView.rowHeight = UITableViewAutomaticDimension
    

    以下是Apple文档Here