Ошибка прокрутки UICollectionView - PullRequest
0 голосов
/ 06 декабря 2018

Я сделал полноэкранный просмотр коллекции с включенной подкачкой:

Вот как я настраиваю его в моем коде:

    let layout = UICollectionViewFlowLayout()
    layout.minimumInteritemSpacing = 0.0
    layout.minimumLineSpacing = 0.0
    layout.itemSize = UIScreen.main.bounds.size
    layout.scrollDirection = UICollectionViewScrollDirection.horizontal
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)

    allQuotesCollectionView.collectionViewLayout = layout

И в моем раскадровке:

CollectionView setup

Проблема, с которой я сталкиваюсь, заключается в том, что при прокрутке в первый раз загруженный экран возникает ошибка анимации прокрутки:

Animation Bug

После этой ошибки прокрутка становится плавной.Как я могу это исправить?Я также использовал Github Framework , но это не помогло.Мне нужно любое возможное решение этой проблемы.

Буду благодарен за любую помощь, большое спасибо.

1 Ответ

0 голосов
/ 08 декабря 2018

После борьбы с этой проблемой в течение 3 или 4 дней наконец-то нашел причину:

Моя ошибка была здесь:

override func viewDidLayoutSubviews() {
    let midIndexPath = IndexPath(row: infiniteSize / 2, section: 0)
    allQuotesCollectionView.scrollToItem(at: midIndexPath, at: .centeredHorizontally, animated: false)
}

После того, как я переместил этот код в метод viewDidAppear - все начало работатьи ошибка исчезла.

Итак, мой окончательный код выглядит следующим образом:

override func viewDidAppear(_ animated: Bool) {
    let layout = UICollectionViewFlowLayout()
    layout.minimumInteritemSpacing = 0.0
    layout.minimumLineSpacing = 0.0
    layout.itemSize = UIScreen.main.bounds.size
    layout.scrollDirection = UICollectionViewScrollDirection.horizontal
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)

    allQuotesCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
    allQuotesCollectionView.collectionViewLayout = layout
    allQuotesCollectionView.isPagingEnabled = true

    let midIndexPath = IndexPath(row: infiniteSize / 2, section: 0)
    allQuotesCollectionView.scrollToItem(at: midIndexPath, at: .centeredHorizontally, animated: false)

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: {
        UIView.transition(with: self.view, duration: 1, options: .transitionCrossDissolve, animations: {
            self.allQuotesCollectionView.isHidden = false
        })
    })
}

Полагаю, вам нужно настроить представление коллекции после загрузки экрана с подкачкой страниц, в основном с начальным индексом.

Надеюсь, это поможет кому-то в будущем!

...