情况(使用 Swift 4.0 & > iOS10.0)
- 我有一个包含部分和行的 TableView。每个细胞只有一个 标签并配置为使其高度适应其标签的高度 感谢自动布局。
- 当一个单元格被点击时,它会显示另一个可能不是 大小相同(因此行数不同)。 我有 无法正确地为单元格设置动画,所以当它被点击时,它 调整其高度以正确显示新标签。
尝试
重新加载整个 TableView ,显示所选的新数据 单元格工作正常,但这不是我想要实现的目标。
我试过了
tableView.beginUpdates()
和tableView.endUpdates()
(有和没有完成处理程序)。当我点击单元格时,所选单元格按预期工作,但其他单元格和所有部分跳转和/或消失。这种行为很奇怪,看起来我在搞乱禁止的功能,但这种行为正是我要找的。p>我试过了
.reloadRows(at: [indexPath], with: .automatic)
.它的行为几乎与tableView.beginUpdates()
完全相同。 (它会重新加载 tableView,我更愿意避免这种情况)。我已尝试使用
layoutIfNeeded()
进行 n°2 和 n°3 的尝试和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()
解决我的问题的最佳方法?如果是这样,我应该如何使用它?如果不是,那么为单元格设置动画的正确方法是什么?。
最佳答案
例如,尝试在 viewDidLoad()
中设置 tableView.estimatedRowHeight = 0
。我对 beginUpdates()
和 endUpdates()
的动画有同样的问题,这很有帮助。但就我而言,我使用 heightForRowAtIndexPath
方法。
关于swift - tableView.beginUpdates() 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47261343/