以下是我拥有的cellForItemAtIndexPath
代码:
static NSString *cellIdentifier = @"Cell";
MyCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
//do stuff, set label text
if (indexPath.section == 0) cell.label.text = [words1 objectAtIndex:indexPath.row];
else if (indexPath.section == 1) cell.label.text = [words2 objectAtIndex:indexPath.row];
else if (indexPath.section == 2) cell.label.text = [words3 objectAtIndex:indexPath.row];
return cell;
我在viewDidLoad
注册了单元格类型:
[_collectionView registerClass:[MyCustomCell class] forCellWithReuseIdentifier:@"Cell"];
我在我的故事板中设置了我的集合视图,代理和数据源正常链接。
现在我的问题......我有两种方法,都有问题。我有3个部分,每个部分都来自一个独特的数据阵列。
获取所需数据后,我使用[_collectionView reloadData]
。这会根据数组计数加载正确数量的单元格,但不会填充屏幕外的单元格。因此,当我在屏幕上滚动它们时,它们没有设置标签。
除了上述内容,我尝试使用以下代码(每个部分一次)在获取数据(首选路径)时重新加载每个部分:
[self.collectionView performBatchUpdates:^{
[self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
} completion:nil];
然而,使用此方法的问题是,在重新加载后,它会使用正确数量的单元格填充我的集合视图,但单元格本身是空白的,标签上没有设置文本。
在这两种情况下,如果我在屏幕上滚动非加载单元格,在屏幕外滚动并重新打开,它们将加载。但是,当你第一次看到它们时,它们并没有。
答案 0 :(得分:0)
解决。放置您的UI代码,例如在UILabel
方法中创建layoutSubviews
(而不是nil)是不好的。
将此代码移至我的自定义init
子类上的UICollectionViewCell
方法,修复了我的问题,如果单元格UI不一致。