Применить NSDiffableDataSourceSnapshot с теми же результатами данных в анимации

У меня есть UITableView с UITableViewDiffableDataSource, в котором я поддерживаю тягу для обновления и разбиение на страницы. Когда я создаю новый снимок с теми же данными и применяю этот снимок, это приводит к странной анимации, когда первые несколько элементов скользят вверх, а новые элементы с теми же данными скользят слева. Вот фрагмент обновления:

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 элементов. Я создаю новый снимок и применяю его к источнику данных, что снова приводит к странной анимации, и мое табличное представление прыгает вверх.

Между изменениями создаются новые объекты, но у них одинаковый хэш, так что это не должно влиять на обновление таблицы, верно?

Кто-нибудь знает, что может заставить представление таблицы думать, что существующее содержимое изменилось, хотя это не так? Единственная информация, которую я нашел о том, как источник данных выполняет различие, - это то, что он проверяет хэш для каждого раздела и элемента.

0 ответов