首页 文章

有什么方法可以在UITableViewCell里面的UIStackView内动态调整UITextView的高度?

提问于
浏览
1

My situation: 我在UITableView原型单元格中的UIStackView中有一个UITextView .

经过一些研究和编码后,我通过在 heightForRowAtestimatedHeightForRowAt 委托方法中返回 UITableViewAutomaticDimension ,实现了动态表行高度调整的正确代码 .

这是有效的,但问题是这种“动态”调整不够动态 . 在编辑UITextView的内容后,它仅调整行的高度以匹配UITextView的高度 .

每当文本视图动态展开以使其中的所有文本都可见时,就会发生相同的调整,但是表格单元格却没有看到文本视图中的第二行,因为单元格没有扩展直到编辑完成) .

直观的做法似乎是使用 textViewDidChange 委托方法,并在文本输入或删除导致文本视图的高度变化时以某种方式均衡行's height with the text view'的高度...

但我无法弄清楚要放在那里的东西 . 我尝试为表视图调整 .rowHeight.estimatedRowHeight ,但在编辑时似乎没有做任何事情,无论是静态高度值还是 UITableViewAutomaticDimension .

Caveat: 与StackOverflow上关于类似问题的大多数其他问题不同,在我的例子中,UITextView位于UIStackView内,这意味着堆栈视图控制文本视图的大小,而表行依次控制堆栈视图的大小同时,约束我调整大小以匹配文本视图's height while editing is still happening (at least that' s的假设,因为我只需将文本包装到新行而不实际调整其帧直到编辑完成为止 .

In short: table rows are only resizing to fit the text view/stack view inside them after text view editing is done because neither the table view's delegate methods nor manually setting .rowHeight and .estimatedRowHeight have any effect while a text view is being edited.

任何关于如何解决这个问题以及在编辑过程中使表行和/或文本视图调整大小的建议都将非常感激 .

1 回答

  • 1

    事实证明,只是详细地写出这个问题,然后在StackOverflow上查看一个不同的问题,这让我找到了几个解决这个困境的解决方案之一 .

    答案:

    func textViewDidChange(_ textView: UITextView) {
        self.listTableView.beginUpdates()
        self.listTableView.endUpdates()
    }
    

    调用 .beginUpdates().endUpdates() 显然会调用表视图的委托方法,而不会像 .reloadData() 那样破坏编辑过程,允许在编辑表行内的文本视图时进行真正动态的表行高度更改 .

相关问题