我有一个用* .xib加载的UIViewController。此ViewController的一个元素是UICollectionView
。我在ViewControllers -viewDidLoad
中发出异步网络请求,并在回调时调用self.collectionView reloadData
。我也尝试过:
dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});
奇怪的是,collectionView确实加载了单元格而不是没有交互的屏幕上可见的那些单元格。滚动后,滚动到视图的单元格显示正常。当我滚动回到开头时,第一个单元格也会出现。
我错过了什么?
我的数据源方法:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return [self.listItems count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
UILabel *lbl = (UILabel *)[cell.contentView viewWithTag:9];
if (!lbl) {
UILabel *lbl = [[UILabel alloc] initWithFrame:cell.contentView.frame];
[lbl setTag:9];
[cell.contentView addSubview:lbl];
}
[lbl setBackgroundColor:[UIColor colorWithRed:1.f green:1.f blue:(10*indexPath.row)/255.f alpha:1]];
[lbl setText:[NSString stringWithFormat:@"%d", indexPath.row]];
return cell;
}
在回调中我所做的就是设置self.listItems = myFetchedArray
并在collectionView上调用-reloadData ...
答案 0 :(得分:0)
尝试在collectionView
之后更新reloadData
布局。
[self.collectionView.collectionViewLayout invalidateLayout];
collectionView.collectionViewLayout.invalidateLayout()
您可以随时调用此方法来更新布局信息。 此方法使集合视图本身的布局无效 马上回来。因此,您可以多次调用此方法 相同的代码块,不会触发多个布局更新。该 在下一个视图布局更新周期中发生实际布局更新。