加载UICollectionViewCell Swift 4时,单元格闪烁问题

时间:2017-09-19 16:39:16

标签: ios swift uicollectionview uicollectionviewcell

我目前遇到UICollectionViewCell的问题以及何时加载。

以下是video的链接以查看其实际操作

以下是我调用的viewDidLoad中的代码

retrieveUrls { (success) in
    if success {
        self.filterImageLabel(handler: { (success) in
            if success {
                if self.spinner != nil {
                    self.spinner.stopAnimating()
                    self.spinner.isHidden = true
                }
                self.collectionView.reloadData()
            }
        })
    }
}

在retrieveUrls中,我正在解析Url以检索图像URL,而对于filterImageLabel,我设置了一个photoUrlArray以与collectionView indexpath一起使用

func filterImageLabel(handler: @escaping (_ status: Bool) -> ()) {
    photoUrlArray = photoUrlArray.filter {$0.label == "Large Square"}
    if photoUrlArray.count > 0 {
        handler(true)
    }
}

CollectionView的方法

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return photoUrlArray.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoCell", for: indexPath) as? PhotoCell {
        cell.updateCellImage(imageUrl: self.photoUrlArray[indexPath.row].source)
        return cell
    }

    return PhotoCell()
}

最后在photocell课程中,我正在设置图像

override func prepareForReuse() {
    super.prepareForReuse()
    photoImg.image = nil
}

func updateCellImage(imageUrl : String) {

    Alamofire.request(imageUrl).responseImage(completionHandler: { (response) in

        guard let image = response.result.value else {return}
        self.photoImg.image = image

    })

}

我已经查看了堆栈溢出的各种不同线程。但似乎无法解决问题。

任何想法都会有所帮助。

1 个答案:

答案 0 :(得分:1)

CollectionView的方法如下:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

  if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoCell", for: indexPath) as? PhotoCell {

    // ********* ISSUE IS HERE *********
    let imageurl = URL(string: self.photoUrlArray[indexPath.row].source)
    cell.photoImg.af_setImage(withURL: imageurl!)
    return cell
  }

  return PhotoCell()

}