防止 UICollectionView 中每个 UICollectionViewCell 中的内容在我滚动时发生变化?
Prevent content in each UICollectionViewCell in UICollectionView from changing as I scroll?
当我在 UICollectionView 中来回滚动时,我注意到单元格中的内容在屏幕上出现和消失时发生了变化。
有什么办法可以防止这种情况发生吗?
我只想将所有内容适当地加载到每个单元格,然后防止它在我滚动时发生变化。
下面是一些与此相关的代码:
- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
cell.backgroundColor = [UIColor clearColor];
UILabel *label = (UILabel *)[cell viewWithTag:100];
if (!label) {
label = [[UILabel alloc] initWithFrame:cell.bounds];
label.tag = 100;
label.text = [self.array objectAtIndex:indexPath.row];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor blackColor];
[cell.contentView addSubview:label];
}
return cell;
}
问题是您没有在 cellForRowAtIndexPath:
中提供标签的内容。请记住,这些细胞正在 重复使用 。因此,即使标签已经存在,您也需要提供标签文本,因为该单元格现在正在不同的行中使用,因此需要不同的文本!
所以只需移动这一行:
label.text = [self.array objectAtIndex:indexPath.row];
...在 if
街区之外,就在 return 之前 cell
.
当我在 UICollectionView 中来回滚动时,我注意到单元格中的内容在屏幕上出现和消失时发生了变化。
有什么办法可以防止这种情况发生吗? 我只想将所有内容适当地加载到每个单元格,然后防止它在我滚动时发生变化。
下面是一些与此相关的代码:
- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
cell.backgroundColor = [UIColor clearColor];
UILabel *label = (UILabel *)[cell viewWithTag:100];
if (!label) {
label = [[UILabel alloc] initWithFrame:cell.bounds];
label.tag = 100;
label.text = [self.array objectAtIndex:indexPath.row];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor blackColor];
[cell.contentView addSubview:label];
}
return cell;
}
问题是您没有在 cellForRowAtIndexPath:
中提供标签的内容。请记住,这些细胞正在 重复使用 。因此,即使标签已经存在,您也需要提供标签文本,因为该单元格现在正在不同的行中使用,因此需要不同的文本!
所以只需移动这一行:
label.text = [self.array objectAtIndex:indexPath.row];
...在 if
街区之外,就在 return 之前 cell
.