Настройка
У меня есть настройка collectionView таким образом, что при прокрутке пользователя вверх можно добавить дополнительные данные, а при прокрутке пользователя внизу добавляются дополнительные данные
Требуемый результат
- Когда пользователь прокручивает вверх, я хочу добавить новые данные сверху, сохраняя текущую позицию прокрутки
CollectionViewCell
без мерцания. - Когда пользователь выполняет прокрутку вниз, добавляйте новые данные, сохраняя текущую позицию прокрутки
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
мерцании.У меня нет той же проблемы при добавлении новых данных, когда пользователь прокручивает вниз