有没有办法在UITableViewCell内的UIStackView内动态调整UITextView的高度?

时间:2016-12-21 21:32:53

标签: ios swift uitableview uitextview uistackview

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

经过一些研究和编码后,我通过在UITableViewAutomaticDimensionheightForRowAt委托方法中返回estimatedHeightForRowAt来实现动态表格行高度调整的正确代码。

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

所以我的目标:每当文本视图动态展开以使其中的所有文本都可见时,就会发生相同的调整,但是表格单元格不会随之展开编辑仍在继续(至少我认为这是正在发生的事情,但我看不到文本视图中的第二行,因为在编辑完成之前单元格不会展开。)

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

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

警告:与StackOverflow上关于类似问题的大多数其他问题不同,在我的例子中,UITextView位于UIStackView内,这意味着堆栈视图控制文本视图的大小,以及表格row依次通过约束来控制堆栈视图的大小,同时,我已经让文本视图自动调整大小以适应其内容,但是表格行没有调整大小以匹配文本视图的高度,而编辑仍在进行中(至少这是假设,因为我无法直观地判断文本视图在编辑过程中是否正在扩展,或者它是否只是将文本包装到新行而没有实际调整其帧直到编辑完成)。 p>

简而言之:表格行仅在文本视图编辑完成后调整大小以适应其中的文本视图/堆栈视图,因为既没有表格视图的委托方法也没有手动设置.rowHeight和{{1}在编辑文本视图时有任何效果。

有关如何解决此问题以及在编辑过程中调整表格行和/或文本视图以进行调整的任何建议将非常感激。

1 个答案:

答案 0 :(得分:1)

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

答案:

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

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