swift - tableView.beginUpdates() 行为异常

标签 swift uitableview

情况(使用 Swift 4.0 & > iOS10.0)

  • 我有一个包含部分和行的 TableView。每个细胞只有一个 标签并配置为使其高度适应其标签的高度 感谢自动布局。
  • 当一个单元格被点击时,它会显示另一个可能不是 大小相同(因此行数不同)。 我有 无法正确地为单元格设置动画,所以当它被点击时,它 调整其高度以正确显示新标签

尝试

  1. 重新加载整个 TableView ,显示所选的新数据 单元格工作正常,但这不是我想要实现的目标。

  2. 我试过了tableView.beginUpdates()tableView.endUpdates() (有和没有完成处理程序)。当我点击单元格时,所选单元格按预期工作,但其他单元格和所有部分跳转和/或消失。这种行为很奇怪,看起来我在搞乱禁止的功能,但这种行为正是我要找的。

  3. 我试过了.reloadRows(at: [indexPath], with: .automatic) .它的行为几乎与 tableView.beginUpdates() 完全相同。 (它会重新加载 tableView,我更愿意避免这种情况)。

  4. 我已尝试使用 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/

相关文章:

uitableview - 使用 Swift 3.0 中的数据在 Xib 中显示 tableView

ios - 如何过滤 TableView 单元格以便过滤掉的单元格不会出现?

arrays - Swift 数组可选类型和下标(Beta 3)

ios - 测试列表是否包含 Swift 中特定类型的元素

Swift 无法将字符串日期解析为 Date 对象

ios - 第二次调用 textFieldDidEndEditing 时 NSFilemanager 不保存文件

ios - 在 iOS 8 中录制音频是否需要请求许可?

swift - 从自动释放池返回对象的正确方法

iOS计算tableView单元格中的文本高度

iphone - 通用、可重复使用的 iPhone 应用程序配置屏幕