scrollViewDidLoad вызывается несколько раз при реализации бесконечной прокрутки

#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
    }

}