在 swift5 中使用 collectionview.reloaddata 新数据到达时如何防止重绘?

How can I prevent redrawing when new data arrives using collectionview.reloaddata in swift5?

我已经使用 Swift 和 iOS 几个月了。当涉及到 CollectionView 的倒数第二项时,我想下载一个新图像。我在下载,但是reloadData函数一直在重绘,collectionview在top。我怎样才能防止它到达顶部?

private func getRandomPhoto() {
    let url = "https://source.unsplash.com/random/400x800"
        
    do{
        var a = try Data(contentsOf: URL(string: url)!)
        images.append(UIImage(data: a)!)
    } catch {
        print("err")
    }
    DispatchQueue.main.async {
        self.collectionView.reloadData()
    }
}

这是我的控制器视图代码

extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return images.count
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ImageCollectionViewCell
        cell.imageView.image = images[indexPath.row]
        return cell
    }

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        for cell in collectionView.visibleCells {
            let indexPathh = collectionView.indexPath(for: cell)
            
            if indexPathh?.row == images.count-1 {
                let url = "https://source.unsplash.com/random/400x800"
                
                getRandomPhoto()
                
            }
        }
    }
}

我针对这个问题做了一个小视频。我希望这很清楚。 https://github.com/Egemenclr/StajCase/blob/master/Örnek/problem.gif

不要重新加载整个 table,而是为新下载的图像插入行

insertItems(at indexPaths: [IndexPath])

建议:不要一次又一次地下载同一张图片。最初下载并使用 NSCache 缓存它。当您再次需要图像时,尝试从缓存中获取。