我有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)
}
}
答案 0 :(得分:0)
首先,您要从prepareForReuse()
的超级视图中删除图片视图,但是您永远不会将其添加回来。重用单元格时不会调用init()
,config()
也不会调用friends[path].userAvatar
。除非您有特定原因,否则您不需要从其超级视图中删除图像视图。只需将图像设置为零就足够了。
此外,设置断点并验证{{1}}是否返回图像的有效路径。