我有一个 collectionView,我有两个问题。首先,滚动太滞后。我的 collectionView 从 url 中的 API 接收数据,如下所示:

这是我的代码:

extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if imageUrl.count >= 4 {
            activity.stopAnimating()
            activity.isHidden = true
        }else{
            DispatchQueue.main.async {
                self.myCollectionView.reloadData()
            }
        }

        return imageUrl.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "myViewCell", for: indexPath) as! myViewCell

        if let url = NSURL(string: imageUrl[indexPath.row]){
            if let data = NSData(contentsOf: url as URL){
                cell.carImageView.contentMode = UIViewContentMode.scaleAspectFit
                cell.carImageView.image = UIImage(data: data as Data)
            }
        }

        cell.firstLabel.text = firstLabelArray[indexPath.row]

        if secondLabelArray != []{
            cell.secondLabel.text = secondLabelArray[indexPath.row]
        }

        return cell
    }
}

我遇到的第二个问题是我只需要刷新集合 View 中的第三个单元格。那是我的第二个标签,但是当我尝试使用 myCollectionView.reloadData() 重新加载我的所有单元格时。我需要每秒刷新第三个单元格。

最佳答案

collectionView 中滞后的问题可能是你使用 NSData 的方式,考虑使用 Alamofire Image,像这样

if imageUrl.count > 0 {
        let eachImage = imageUrl[indexPath.row]
        Alamofire.request(eachImage).responseImage(completionHandler: {(response) in
            print("answer\(response)")
            if let image = response.result.value{
                DispatchQueue.main.async {
                    cell.ImageView.image = image
                }
            }
        })
        }

关于ios - 如何在 collectionView 中仅重新加载一个单元格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53088649/

10-13 09:27