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

Any way to dynamically adjust the height of a UITextView inside a UIStackView inside a UITableViewCell?

我的情况:我在 UITableView 原型单元格中的 UIStackView 内部有一个 UITextView。

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

这可行,但问题是此 "dynamic" 调整不够动态。它只会在 UITextView 的内容编辑完成后调整行的高度以匹配 UITextView 的高度。

所以我的目标是: 每当文本视图动态扩展以使其中的所有文本可见时进行同样的调整,它已经这样做了,但是 table 编辑仍在进行时单元格不会随之扩展(至少我认为这是正在发生的事情,但我看不到文本视图中的第二行,因为单元格在编辑完成之前不会扩展)。

直观的做法似乎是使用 textViewDidChange 委托方法,当文本输入或删除导致文本视图的高度发生变化时,以某种方式使行的高度与文本视图的高度相等...

但我不知道该放什么。我尝试为我的 table 视图调整 .rowHeight.estimatedRowHeight,但是在编辑时这似乎没有做任何事情,无论是静态高度值还是 UITableViewAutomaticDimension

警告: 与 Whosebug 上有关类似问题的大多数其他问题不同,在我的例子中,UITextView 位于 UIStackView 内部,这意味着堆栈视图控制文本的大小视图,而 table 行又通过约束控制堆栈视图的大小,同时,我已经让文本视图自动调整大小以适应其内容,但 table 行不是'在编辑仍在进行时调整大小以匹配文本视图的高度(至少这是假设,因为我无法直观地判断文本视图是否在编辑时正在扩展,或者它是否只是将文本换行在编辑完成之前没有实际调整其框架)。

简而言之:table 行仅在文本视图编辑完成后调整大小以适应其中的文本 view/stack 视图,因为 table 视图的委托方法或手动设置 .rowHeight.estimatedRowHeight 在编辑文本视图时没有任何效果。

任何关于如何解决这个问题并让 table 行 and/or 文本视图在编辑过程中调整大小的任何建议将不胜感激。

事实证明,只需详细写下该问题,然后查看 Whosebug 上的另一个问题,我就可以找到描述该困境解决方案的几个答案之一。

答案:

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

调用 .beginUpdates().endUpdates() 显然调用了 table 视图的委托方法,而不会像 .reloadData() 那样中断编辑过程,允许真正动态的 table在 table 行内编辑文本视图时行高发生变化。