Сбой UICollectionView scrollToItemAtIndexPath ios 10 - PullRequest
0 голосов
/ 13 июня 2018

Я получил эту ошибку на iOS 10, но она отлично работает как на iOS 11, так и на iOS 9.

* Завершение работы приложения из-за необработанного исключения 'NSRangeException', причина: '*- [__ NSArrayM objectAtIndex:]: индекс 5 за пределами [0 .. 4] '

Вот мой код:

let indexPath = IndexPath(row: index, section: 0)

print(indexPath.row) // 5
//here is the problem. I got 6 items in my datasource but looks like collectionView still consider it's only 5.
print(collectionView.numberOfItems(inSection: 0)) // 6

if indexPath.row < collectionView.numberOfItems(inSection: 0) {
    collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
}

Я проверил numberOfItems перед вызовом scrollToItem, новсе еще получил крах.Странно, кто-нибудь сталкивался с этой проблемой раньше?

1 Ответ

0 голосов
/ 18 июня 2018

Это также случилось со мной.Похоже, что Apple представила некоторые модификации на iOS10, которые вынуждают вручную отключать Layout () после перезагрузки данных.Это не было нужно на iOS9, и это также не нужно на iOS11.Итак, либо они передумали, либо это было ошибкой:)

Просто позвоните invalidateLayout(), чтобы избежать сбоя, например:

self.collectionView.reloadData()
self.collectionView.collectionViewLayout.invalidateLayout() // Fix iOS10 crash
...