Проблемы с PerformBatchUpdates в NSCollectionView

У меня есть NSCollectionView, использующий пользовательский макет, который анимирует его содержимое, сдвигая старые ячейки влево и новые ячейки справа. Я оживляю это с помощью кода, похожего на этот:

collectionView.animator().performBatchUpdates({
    collectionView.reloadSections(IndexSet(0..<3))
}, completionHandler: nil)

(Обратите внимание, что это значительно упрощено, для иллюстративных целей)

Я знаю, что макет обеспечивает правильный начальный и конечный кадры. Тем не менее, когда я выполняю обновления, я вижу, что, когда новые ячейки вставляются и старые ячейки выдвигаются, появляется призрачный дубликат старой ячейки и исчезает.

Я тщательно исследовал это и обнаружил, что это, по-видимому, вызвано выполнением более одного типа обновления в пакете - если я только добавляю или удаляю только ячейку, он ведет себя так, как должен. Однако, если я одновременно добавляю и удаляю ячейки (или перезагружаюсь, так как перезагрузка технически выполняется путем последовательного удаления и вставки ячеек), я получаю ячейку-призрак.

Может кто-нибудь пролить свет на то, почему это происходит, или как это предотвратить? Все, что я хочу, это эффект горизонтального пейджинга!

ОБНОВИТЬ:

Я нашел решение, но это похоже на взлом, поэтому я все равно буду признателен за причины. Я могу забыть об использовании пакетных обновлений и перезагрузки разделов. Вместо этого я звоню collectionView.animator().deleteSections() с последующим collectionView.animator().insertSections(), Это работает, хотя с раздражающим побочным эффектом, что я должен держать пустой раздел в представлении коллекции постоянно, чтобы остановить сбой приложения, когда все разделы удалены.

0 ответов

Другие вопросы по тегам