【发布时间】:2016-02-07 21:24:41
【问题描述】:
我有一个类似于 Mail 中的撰写屏幕的表格视图,其中一个单元格用于文本输入。我希望通过使用自动布局将单元格的 contentView 约束到其 UITextView 子视图来自动调整单元格的大小。表视图的rowHeight 和estimatedRowHeight 设置为UITableViewAutomaticDimension。此外,文本视图的scrollEnabled 属性设置为false,以便它报告其intrinsicContentSize。
然而,当用户输入文本行时,单元格不会更新其高度,即使文本视图本身会更新其内在内容大小。据我所知,手动请求此请求的唯一方法是让表格视图调用beginUpdates() 和endUpdates()。然后单元格的高度会正确更新,但这也会导致整个表格视图的重新布局。这是(别人的)sample code demonstrating the problem。
如何在不布局整个表格视图的情况下反映单元格文本视图的变化?
【问题讨论】:
-
你是怎么解决这个问题的?有没有不抖动的解决方案?
-
到目前为止,我只找到了部分解决方案。我尝试的第一种方法,只是在
textViewDidChange中调用beginUpdates()和endUpdates(),接近我想要的。但是你必须处理整个表格视图布局变得无效,以及随后的滚动。或者,重新加载行可以工作如果它可以在没有明显中断的情况下完成,但这开始导致我宁愿避免使用 Core Animation 的 hacky KVO 东西。 -
beginUpdates+endUpdates的问题:当单元格顶部看不见时开始抖动。reloadRowsAtIndexPaths的问题:取消编辑,因此键盘消失。我在 节流 解决方案方面取得了相当大的成功。
标签: ios uitableview autolayout uitextview