бесконечная прокрутка для представления UICollection - PullRequest
1 голос
/ 24 сентября 2019

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

var fetchMore = false
var pageNumber = 0

var productPageString: String {
    if pageNumber == 0 {
        return "pageNumber=0&"
    } else {
        return "pageNumber=\(pageNumber)&"
    }
}

func fetchProducts() {
    fetchMore = false
    let validatedTextString = UserDefaults.standard.object(forKey: "productsSearchValue")
    let searchText = validatedTextString!
    let urlString = APIConstants.baseurl + APIConstants.products + "?searchString=\(searchText)&\(productPageString)itemsPerPage=20"
    guard let url = URL(string: urlString) else { return }
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        if error != nil {
            print(error!)
            return
        }
        do {
            let jsonData = try JSONDecoder().decode(ProductSearch.self, from: data!)

            self.productSearchResults = [Products]()

            for dictionary in jsonData.data {
                let product = Products(productId: dictionary.productId, categoryId: dictionary.categoryId, storeId: dictionary.storeId, name: dictionary.name, description: dictionary.description, imageUrl: dictionary.imageUrl, price: dictionary.price)
                self.productSearchResults?.append(product)
                self.fetchMore = true
            }

        } catch let jsonError {
            print(jsonError)
        }
        }.resume()
}

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentOffset.y
    let contentHeight = scrollView.contentSize.height

    if offsetY > contentHeight - scrollView.frame.height {
        if fetchMore {
            fetchProducts()
            pageNumber += 1
        }
    }
}

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

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Теперь это работает, все, что мне нужно было сделать, это удалить строку

self.productSearchResults = [Products]()

в этом не было необходимости

0 голосов
/ 24 сентября 2019

Вам нужно перезагрузить

 for dictionary in jsonData.data {
    let product = Products(productId: dictionary.productId, categoryId: dictionary.categoryId, storeId: dictionary.storeId, name: dictionary.name, description: dictionary.description, imageUrl: dictionary.imageUrl, price: dictionary.price)
    self.productSearchResults?.append(product)
 }

 self.fetchMore = true

 DispatchQueue.main.async {
   self.collectionView.reloadData()
 }
...