Добавить новые данные в UICollectionView, сохраняя текущую позицию прокрутки без мерцания CollectionViewCell - PullRequest
0 голосов
/ 10 июня 2019

Настройка

У меня есть настройка collectionView таким образом, что при прокрутке пользователя вверх можно добавить дополнительные данные, а при прокрутке пользователя внизу добавляются дополнительные данные

Требуемый результат

  1. Когда пользователь прокручивает вверх, я хочу добавить новые данные сверху, сохраняя текущую позицию прокрутки CollectionViewCell без мерцания.
  2. Когда пользователь выполняет прокрутку вниз, добавляйте новые данные, сохраняя текущую позицию прокрутки CollectionViewCell без каких-либо мерцаний.

Текущая реализация

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


    func prepend () {
            let newData = getPrependData()
            dataSource.insert(newData, at: 0)

            let bottomOffset: CGFloat = collectionView.contentSize.height - collectionView.contentOffset.y
            CATransaction.begin()
            CATransaction.setDisableActions(true)
            collectionView.performBatchUpdates({
                self.collectionView.insertSections(IndexSet(arrayLiteral: 0 ) )
            }) { finished in
                self.collectionView.contentOffset = CGPoint(x: 0, y: self.collectionView.contentSize.height - bottomOffset)
                CATransaction.commit()
            }
        }

Вышеуказанный метод prepend является базой вызова при условии scrollView.contentOffset.y внутри scrollViewDidEndDecelerating, поэтому при вызове метода prepend анимация не выполняется.

override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        if scrollView.contentOffset.y < 800 {
                    prependVertical()
                }
        }

Подробнее о collectionView, размер CollectionViewCell равен размеру ViewController, что означает, что каждый Cell занимает весь экран, а isPagingEnabled установлен на true

Проблема

Используя приведенный выше код, мне удается сохранить позицию прокрутки collectionView.но проблема в CollectionViewCell мерцании.У меня нет той же проблемы при добавлении новых данных, когда пользователь прокручивает вниз

...