我在tablview单元格中使用了一个collectionview,其中collectionview单元格有一个imageview,图像从cellForItemAtIndexPath中的URL数组中显示。我在tableview单元类中调用webservice来获取URL数组。 我的问题是每当我向下或向上滚动tableview时,collectionview单元格都在重复,collectionview的图像会重复。所以如何摆脱这种情况。
我的代码如下 -
webservice的内部响应
let imgList : NSArray = arrReponseDetails.value(forKey: "imageList") as! NSArray
self.arrImgUrls.removeAll()
for dict in imgList[0] as! NSArray {
let dictionary = dict as! NSDictionary
let strUrl : String = dictionary["url_highRes"] as! String
let url : URL = URL(string: strUrl)!
self.arrImgUrls.append(url)
}
self.collectionView.reloadData()
cellForItemAtIndexPath内的代码
let cell : CollectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
let url : URL = self.arrImgUrls[indexPath.row]
cell.imgSticker.sd_setShowActivityIndicatorView(true)
cell.imgSticker.sd_setIndicatorStyle(.gray)
cell.imgSticker.sd_setImage(with: url, placeholderImage: nil)
cell.imgSticker.contentMode = .scaleAspectFit
return cell
答案 0 :(得分:1)
我对你的问题没有太多了解,但我认为问题在于使用可重复使用的单元缓存图像。
只需在collectionView Cell类(prepareForReuse()
)中实现CollectionCell
方法。
override func prepareForReuse() {
super.prepareForReuse()
self.imgSticker = nil
}
的参考
答案 1 :(得分:0)
我不会'在tableView中使用colelctionView,这是一种非常奇怪的方法。我曾经是第一次自己做这件事,这让我陷入困境。考虑使用自定义布局更改collectionView的逻辑...
但是要回答你的问题,最好使用这种方法(看看这个答案)
根据这个答案,在CellForRow中设置imageView方法:
答案 2 :(得分:0)
在设置新内容之前,您需要从单元格视图中清除旧内容,因为在某些情况下可能会遗留一些内容并且报告的问题会发生。
func collectionView(collectionView: UICollectionView,
cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
let cell : CollectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
cell.imageView.image = nil; //Remove the image (cache one)
}
希望这会有所帮助!!
答案 3 :(得分:0)
您好你应该在CollectionCell类上添加以下代码:
- (void)prepareForReuse
{
[super prepareForReuse];
[[self imgSticker] setImage:nil];
}
注意:如果您也可以设置占位符图像会更好。