Применить 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 элементов. Я создаю новый снимок и применяю его к источнику данных, что снова приводит к странной анимации, и мое табличное представление прыгает вверх.
Между изменениями создаются новые объекты, но у них одинаковый хэш, так что это не должно влиять на обновление таблицы, верно?
Кто-нибудь знает, что может заставить представление таблицы думать, что существующее содержимое изменилось, хотя это не так? Единственная информация, которую я нашел о том, как источник данных выполняет различие, - это то, что он проверяет хэш для каждого раздела и элемента.