Проблемы с PerformBatchUpdates в NSCollectionView
У меня есть NSCollectionView, использующий пользовательский макет, который анимирует его содержимое, сдвигая старые ячейки влево и новые ячейки справа. Я оживляю это с помощью кода, похожего на этот:
collectionView.animator().performBatchUpdates({
collectionView.reloadSections(IndexSet(0..<3))
}, completionHandler: nil)
(Обратите внимание, что это значительно упрощено, для иллюстративных целей)
Я знаю, что макет обеспечивает правильный начальный и конечный кадры. Тем не менее, когда я выполняю обновления, я вижу, что, когда новые ячейки вставляются и старые ячейки выдвигаются, появляется призрачный дубликат старой ячейки и исчезает.
Я тщательно исследовал это и обнаружил, что это, по-видимому, вызвано выполнением более одного типа обновления в пакете - если я только добавляю или удаляю только ячейку, он ведет себя так, как должен. Однако, если я одновременно добавляю и удаляю ячейки (или перезагружаюсь, так как перезагрузка технически выполняется путем последовательного удаления и вставки ячеек), я получаю ячейку-призрак.
Может кто-нибудь пролить свет на то, почему это происходит, или как это предотвратить? Все, что я хочу, это эффект горизонтального пейджинга!
ОБНОВИТЬ:
Я нашел решение, но это похоже на взлом, поэтому я все равно буду признателен за причины. Я могу забыть об использовании пакетных обновлений и перезагрузки разделов. Вместо этого я звоню collectionView.animator().deleteSections()
с последующим collectionView.animator().insertSections()
, Это работает, хотя с раздражающим побочным эффектом, что я должен держать пустой раздел в представлении коллекции постоянно, чтобы остановить сбой приложения, когда все разделы удалены.