情况(使用Swift 4.0&>> iOS10.0)
尝试
重新加载显示所选内容的新数据的整个表格视图 细胞工作正常,但它不是我想要实现的。
我尝试了tableView.beginUpdates()
和tableView.endUpdates()
(有和没有完成处理程序)。当我点击单元格时,它会按预期的方式对所选单元格起作用,但其他单元格和所有部分会跳转和/或消失。这种行为很奇怪,看起来我正在搞乱禁用的功能,但行为就是我要找的。 p>
我试过.reloadRows(at: [indexPath], with: .automatic)
。它的行为几乎与tableView.beginUpdates()
完全相同(并重新加载tableView,我更愿意避免)。
我尝试过n°2& n°3与layoutIfNeeded()
和layoutSubviews()
一起,没有帮助。
代码示例
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
// Attempt n°2
tableView.beginUpdates()
tableView.endUpdates()
// Attempt n°3 (alternatively to attempt n°2)
tableView.reloadRows(at: [indexPath], with: .automatic)
}
问题:
tableView.beginUpdates()
是解决问题的最佳方法吗?如果是这样,我应该如何使用它?如果没有,那么为细胞设置动画的正确方法是什么?。
答案 0 :(得分:0)
例如,尝试在tableView.estimatedRowHeight = 0
中设置viewDidLoad()
。我对beginUpdates()
和endUpdates()
的动画遇到了同样的问题,这有帮助。但在我的情况下,我使用heightForRowAtIndexPath
方法。
答案 1 :(得分:-1)
这似乎是由this answer解决的类似问题。
这比链接的答案简单得多。您希望在更新方法之间添加tableView.setNeedsLayout()
。这告诉表视图在更新周期结束时的布局。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// Change text
...
// Update height
tableView.beginUpdates()
tableView.setNeedsLayout()
tableView.endUpdates()
}