使用文本视图更新自调整表格查看单元格的高度

Eri*_*oss 5 uitableview uitextview ios autolayout

我有一个类似于Mail中的Compose屏幕的表视图,其中一个单元格用于文本输入.我希望通过使用自动布局contentView将单元格约束到其UITextView子视图来自动调整单元格大小.表视图rowHeightestimatedRowHeight设置为UITableViewAutomaticDimension.此外,文本视图的scrollEnabled属性设置为false以便报告它intrinsicContentSize.

但是,单元格不会更新其高度,因为用户输入了文本行,即使文本视图本身确实更新了其内在内容大小.据我所知,手动请求此唯一的办法是表视图调用beginUpdates()endUpdates().然后正确更新单元格的高度,但这也会导致整个表格视图的重新布局.这是(别人的)示例代码,演示了这个问题.

如何在不布置整个表格视图的情况下反映单元格文本视图中的更改?

Swi*_*ect 1

您无法更改现有UITableViewCell. 您想告诉UITableView该单元格无效,然后重新加载它。

重新加载单元格时 ( cellForRowAtIndexPath),您可以传递新的、更新的单元格。然后您触发单个单元格刷新tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

reloadRowsAtIndexPaths并不那么激烈reloadData()。它是准时索引刷新,不需要被tableView.beginUpdates和包围tableView.endUpdates,并且您可以提供您选择的动画方法,例如.Fade

请参阅reloadRowsAtIndexPaths(_:withRowAnimation:)文档


另请访问此 Stack Overflow 答案,其中详细描述了更改单元格高度。

动画演示