这是一个非常奇怪的问题。我有一个UICollectionView,它似乎可以在iPad或模拟器上作为iPad完美运行,但在iPhone或iPhone模拟器上运行时会出现问题。问题是如果将一个项添加到数据源并执行reloadData,则新添加的项将不会显示在集合视图中。如果我完全退出视图控制器并重新打开它,那么该项目就在那里。这个问题仅在iPhone上,而不是iPad,它完美运行。
在所有情况下,返回的项目数是正确的,并且通过出列循环的次数是正确的(通过调试器验证)。
以下相关代码。我使用以下内容初始化viewDidAppear中的CV:
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
flowLayout.minimumInteritemSpacing = 3.0f;
UICollectionViewCell *cvCell = [[UICollectionViewCell alloc] init];
cv = [[UICollectionView alloc] initWithFrame:CGRectMake(1.0f, 80.0f, [Utility screenWidth]-2.0f, [Utility screenHeight]-60.0f) collectionViewLayout:flowLayout];
[cv setDelegate:self];
[cv setDataSource:self];
[cv setAllowsMultipleSelection:NO];
[cv setAllowsSelection:NO];
[cv setBackgroundColor: [UIColor whiteColor]];
[cv registerClass:[cvCell class] forCellWithReuseIdentifier:@"Cell"];
[self.view addSubview:cv];
[self.view sendSubviewToBack:cv];
[self queryData]; // [self queryData] also does a [cv reloadData]
CV代表如下:
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection: (NSInteger)section
{
return [cvData count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
[cell.contentView.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
Item *item = (Item *) [cvData objectAtIndex:indexPath.row];
CGFloat cellSize = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) ? 100.0f : 160.0f;
ImageWithAttachedLabel *imageWithLabel = [[ImageWithAttachedLabel alloc] initWithFrame:CGRectMake(0,0,cellSize,cellSize)
withImage: [UIImage imageWithData: item.itemPhoto]
withLabel: item.itemName
roundBottoms: YES];
[cell.contentView addSubview:imageWithLabel];
return cell;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 3.0f;
}
运行调试器发现numberOfItemsInSection返回项目的CORRECT计数,并且通过出队循环的次数是正确的,但是添加的最后一项(应始终是cv中的最后一个单元格,因为项目是未显示。
我还没有找到任何提及任何类似内容的文章,所以我猜测我在某个地方有一个错误,但这是难以捉摸的。
任何建议表示赞赏。
答案 0 :(得分:0)
也许您可以在将新项目添加到数据源后执行此操作,强制显示新添加的项目:
int size = [cvData count];
NSIndexPath *lastCell = [NSIndexPath indexPathForRow:size inSection:0];
[self.collectionView insertItemsAtIndexPaths:@[lastCell]];
(假设你在你的cv上指向self.collectionView)