可重用的UICollectionViewCell不更改UIImageView属性(显示重复项)

时间:2017-10-27 00:56:55

标签: swift uicollectionview

我有UICollectionView一个包含UIImageView的可重复使用的单元格,但集合视图在图片视图中为集合中的每个单元格项目显示相同的图像。

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

    let path = indexPath.item
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "friendAvatar", for: indexPath) as! AvatarCollectionViewCell
    cell.avatarView.image = friends[path].userAvatar
    return cell

}


class AvatarCollectionViewCell: UICollectionViewCell {


    var avatarView = UIImageView()


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

        prepareForReuse()
        config()

    }

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


    override func prepareForReuse() {

        avatarView.image = nil
        avatarView.removeFromSuperview()

    }


    func config() {

        avatarView.frame = CGRect(x: 0, y: 0, width: 64, height: 64)
        avatarView.layer.cornerRadius = 64 / 4
        avatarView.clipsToBounds = true
        avatarView.contentMode = .scaleAspectFill
        addSubview(avatarView)

    }


}

1 个答案:

答案 0 :(得分:0)

首先,您要从prepareForReuse()的超级视图中删除图片视图,但是您永远不会将其添加回来。重用单元格时不会调用init()config()也不会调用friends[path].userAvatar。除非您有特定原因,否则您不需要从其超级视图中删除图像视图。只需将图像设置为零就足够了。

此外,设置断点并验证{{1}}是否返回图像的有效路径。