有时我的ColectionViewCell的进度条不可见,
我在每一行和下面都有一些项目我试图隐藏单个项目的ProgressBar,但我的进度条隐藏在一行的所有项目中
final
任何想法如何解决这个???
答案 0 :(得分:2)
只是简短的概述,所以你得到答案
UICollectionView经过高度优化,因此只在内存中保留屏幕上可见的行。现在,所有行单元格都缓存在池中并被重用而不是重新生成。每当用户滚动UICollectionView时,它会在Pool中添加刚刚隐藏的行,并重新使用它们作为可见行。
所以,现在,回答你的问题
当您滚动CollectionView时,会为每个indexPath再次调用collectionView数据源方法,并重新使用隐藏的单元格。因此,在其他单元格中,您隐藏进度条,重新使用它仍然显示隐藏进度条
<强>解强>
重新调整每个CELL的进度条可见性调用cellForItemAtIndexPath
func collectionView(collectionView: UICollectionView,
cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell",
forIndexPath: indexPath) as! CollectionViewCell
cell.loaderView.hidden = false //RESET ITS VISIBILITY
let url = NSURL(string: "\(attachedImgUrlDict[collectionView.tag]![indexPath.item])")// its a Url
cell.imgViewOfCell.sd_setImageWithURL(url, placeholderImage: nil, options: SDWebImageOptions.CacheMemoryOnly, progress: {
//SAME CODE
}
return cell
}
答案 1 :(得分:2)
假设您在UICollectionView中有固定数量的单元格。
解决此类问题的提示when you have controls in UICollectionViewCell or UITableViewCell, give tag to your controls depending upon your indexPath
。
案例1:如果CollectionView是截面的,那么你的标签就像[0] [0],[1] [0] ......在这种情况下做类似的事情,
collectionViewCell.progressBar.tag = [[NSString stringWithFormat:@"%ld%ld",(long)indexPath.section,(long)indexPath.item] intValue]; // If it is sectional collection view
案例2:如果集合视图是非截面的,请执行以下操作,
collectionViewCell.progressBar.tag = [[NSString stringWithFormat:@"%ld",(long)indexPath.item] intValue]; // If it is non-sectional collection view
希望这可以解决您的问题或让您相应地进行管理。 如果你的单元格中有多个控件,那么只需给出indexPath.item + 1 + 2 ...
等标签