UICollectionView 的奇怪行为
Posted
技术标签:
【中文标题】UICollectionView 的奇怪行为【英文标题】:Weird behaviour of UICollectionView 【发布时间】:2016-12-14 12:05:11 【问题描述】:正如您在附加的 GIF 中看到的那样,UICollectionView 工作正常,但单元格中的图像不稳定(首先您看到一个图像,然后图像变为正确的图像)。
GIF 示例: http://d.pr/i/ZccO
刷新触发器:
self?.productsCollectionView.reloadData()
创建每个单元格的collectionView函数:
// make a cell for each cell index path
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
// Check if need to load more battles
if indexPath.item + Constants.bufferToLoad >= (Constants.pageSize * self.page) && Constants.pageSize * self.page < self.totalProducts
self.page += 1
self.getProducts(false)
var cell:UICollectionViewCell?
if self.isLoading && indexPath.item == self.products.count-1
cell = collectionView.dequeueReusableCellWithReuseIdentifier(Constants.loadigCell, forIndexPath: indexPath) as? LoadingCollectionViewCell
(cell as! LoadingCollectionViewCell).activityView.startAnimating()
else
cell = collectionView.dequeueReusableCellWithReuseIdentifier(Constants.cellName, forIndexPath: indexPath) as? SavedProductCollectionViewCell
let productCell = cell as! SavedProductCollectionViewCell
productCell.product = self.products[indexPath.item]
return cell!
这是我为每个 CollectionViewCell 设置图像的方式:
var product:Product!
didSet
self.updateUI()
override func awakeFromNib()
super.awakeFromNib()
self.layer.cornerRadius = 5
self.layer.masksToBounds = true
func updateUI()
self.productImage.loadImageFromURLString(self.product.mainImage!,placeholderImage: UIImage(named: "placeHolder"))
self.productNameLabel.text = self.product?.name
self.productPriceLabel.text = self.product?.price
self.setPicks()
【问题讨论】:
您在 GIF 上看到的是可重复使用的单元格在实践中的工作方式。 【参考方案1】:细胞被重复使用。当一个重用单元被返回时,它仍然会包含旧图像,直到新图像的加载完成。您应该将图像设置为nil
或cellForItemAtIndexLath
或单元格的prepareForReuse
方法中的某个占位符图像。
override func prepareForReuse()
self.productImage = nil
self.productNameLabel.text = ""
self.productPriceLabel.text = ""
【讨论】:
嘿嘿,但是我之前看到的图片不是cell的旧图,每次刷新都会出现 单元格不会以相同的顺序重复使用,因此您得到的是旧图像,不一定是之前在该位置的图像 你能写一个你推荐我添加的代码sn-p吗?我试图将 productImage 设置为 null,但发生了同样的奇怪行为 您的代码 sn-p 返回一个错误,因为“loadImageFromURLString”不适用于 nil,self.productImage.image = nil 不会返回错误,但问题是一样的以上是关于UICollectionView 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 单元格高度/可滚动内容行为奇怪/不正确
启用分页和每页多个单元格时奇怪的 UICollectionView 行为
在 UICollectionView 中使用 reloadData 时如何从重新加载中排除标头