My situation: 我在UITableView原型单元格中的UIStackView中有一个UITextView .
经过一些研究和编码后,我通过在 heightForRowAt
和 estimatedHeightForRowAt
委托方法中返回 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 回答
事实证明,只是详细地写出这个问题,然后在StackOverflow上查看一个不同的问题,这让我找到了几个解决这个困境的解决方案之一 .
答案:
调用
.beginUpdates()
和.endUpdates()
显然会调用表视图的委托方法,而不会像.reloadData()
那样破坏编辑过程,允许在编辑表行内的文本视图时进行真正动态的表行高度更改 .