#swift #uiscrollview #uicollectionview #uiscrollviewdelegate
#swift #uiscrollview #uicollectionview #uiscrollviewdelegate
Вопрос:
Я пытаюсь реализовать бесконечную прокрутку в представлении коллекции, которое имеет пользовательский макет.
после поиска я нашел этот метод:
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
//make sure collection view is on screen
if collectionView?.window == nil { return }
let offsetY = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
if offsetY > contentHeight - scrollView.frame.size.height {
print("scroll ended")
getNextTenProducts()
collectionView?.reloadData()
}
}
однако оператор print вызывается несколько раз, что приводит к вставке большого количества ячеек в представление коллекции, иногда он даже вызывается 20 раз подряд.
есть ли обходной путь?
Ответ №1:
Я нашел решение:
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if collectionView?.window == nil { return }
let offsetTolerance = CGFloat(30)
let offsetY = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
if offsetY > contentHeight - scrollView.frame.size.height offsetTolerance, !scrollViewReachedBottom {
print("scroll ended")
scrollViewReachedBottom = true
} else if offsetY < contentHeight - scrollView.frame.size.height - offsetTolerance {
scrollViewReachedBottom = false
}
}