2

我有一个带有 UITableViewDiffableDataSource 的 UITableView,我在其中支持刷新和分页。当我创建具有相同数据的新快照并应用该快照时,它会产生一个奇怪的动画,其中前几个元素向上滑动,而具有相同数据的新元素从左侧滑入。这是更新的片段:

var snapshot = NSDiffableDataSourceSnapshot<String, MyItemIdentifier>()

sections.forEach { section in 
  snapshot.appendSections([section.title])
  snapshot.appendItems(section.items, toSection: section.title)
}

self.dataSource?.apply(snapshot)

当数据没有改变时,应用与前一个内容相同的新快照不应该产生任何动画?我用新内容检查了现有内容的哈希值,它们都是一样的。

此外,我有一个无限滚动,可以按 10 个项目加载 10 个项目。当我向下滚动并加载下一页时,现有数据附加了 10 个项目。我创建了一个新快照并将其应用于数据源,这再次导致一个奇怪的动画和我的表格视图跳到顶部。

在更改之间,创建了新对象,但它们具有相同的散列,因此它不应该影响表的刷新,对吧?

有谁知道什么可能导致表格视图认为现有内容已经改变,尽管它没有?我发现的关于数据源如何进行差异的唯一信息是它检查每个部分和项目的哈希值。

4

0 回答 0