在已设置的图像之上加载图像的问题 swift 4

problem with images loading on top of already set images swift 4

我在 cellForItemAtIndexPath 中遇到问题,我正在为单元格的 UIButton 设置图像,但每次滚动 collectionView 的单元格时,它都会一次又一次地将图像放在已设置图像的顶部。我看得出来是因为图像的阴影越来越浓。我正在从 swift 文件中的图像文字创建的数组中提取图像,并且正在加载正确的图像,因此那里没有问题。我确信这对大多数人来说是一个简单的修复,但我似乎无法在任何地方找到答案。

Image of my cellForItemAtIndexPath function

My app running before I scroll

App after scrolling a bit

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

    collectionView.bounces = false

    let imageNumber = indexPath.item

    let collectionImage: UIButton = {
        let image = UIButton()
        image.setImage(collectionImageArray[imageNumber].withRenderingMode(.alwaysOriginal), for: .normal)
        image.contentMode = .scaleAspectFit
        image.addTarget(self, action: #selector(handleCollectionTap), for: .touchUpInside)
        return image
    }()

    collectionImage.imageView?.image = collectionImageArray[imageNumber]

    cell.addSubview(collectionImage)
    collectionImage.anchor(top: nil, left: nil, bottom: nil, right: nil, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
    collectionImage.centerXAnchor.constraint(equalTo: cell.centerXAnchor).isActive = true
    collectionImage.centerYAnchor.constraint(equalTo: cell.centerYAnchor).isActive = true


    print(imageNumber)

    return cell
}

如果其他人遇到这个问题(或者我可能是唯一一个愚蠢的人),问题是我应该创建我的 UIButton,添加子视图,并将它限制在单元格内 class 并从 cellForItem AtindexPath 方法中设置图像和目标处理程序,如下所示。

class HomeViewCell: UICollectionViewCell {

let collectionImage: UIButton = {
    let image = UIButton(type: .custom)
    image.contentMode = .scaleAspectFit
    return image
}()

override init(frame: CGRect) {
    super.init(frame: frame)

    addSubview(collectionImage)
    collectionImage.anchor(top: nil, left: nil, bottom: nil, right: nil, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
    collectionImage.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
    collectionImage.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

}

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

    collectionView.bounces = false

    let imageNumber = indexPath.item

    let image = collectionImageArray[imageNumber].withRenderingMode(.alwaysOriginal)
    cell.collectionImage.setImage(image, for: .normal)
    cell.collectionImage.addTarget(self, action: #selector(handleCollectionTap), for: .touchUpInside)

    print(imageNumber)

    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: view.frame.width, height: view.frame.height)
}

@objc func handleCollectionTap() {
    let layout = UICollectionViewFlowLayout()
    let cardViewer = CardViewerController(collectionViewLayout: layout)
    present(cardViewer, animated: true, completion: nil)
}

现在一切运行顺利! :)