需求:
在collectionView: cellForItemAtIndexPath: 方法中为不同cell更换背景图片。
症状:
滚动时背景图片没有出现在预期位置。
调试:
cell中加入label,text设为indexPath.item. 发现label出现叠加现象。
解决方案:
获取reusableCell后,删除所有subview。
代码:
//collection item -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *myCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"levelCell" forIndexPath:indexPath]; //设置圆角 myCell.layer.cornerRadius = 8; myCell.layer.borderWidth = 1; //删除已存在的subview for(UIView *view in myCell.subviews) { [view removeFromSuperview]; } //item背景图片 UIImageView *cellBg = [[UIImageView alloc] initWithFrame: myCell.bounds]; NSString *theme = [Utils StatusOPValueAtKey:@"currentTheme"]; NSString *imgName = [NSString stringWithFormat:@"%@_grid_bg_%ld.png", theme, (indexPath.item/3+1)*3 ]; cellBg.image = [self getGrayImage:[UIImage imageNamed:imgName]]; //将rank图片加入背景图片 CGRect rankFrame = CGRectMake(0, 92, 90, 32); UIImageView *rank = [[UIImageView alloc] initWithFrame: rankFrame]; rank.image = [UIImage imageNamed:@"HaiZei_rank_0.png"]; [cellBg addSubview:rank]; [myCell addSubview:cellBg]; [myCell sendSubviewToBack:cellBg]; return myCell; }