我有一个UICollectionView
可以添加和删除的单元格。我正在使用 进行这些更改performBatchUpdates
,并且布局按预期设置动画。
当我滚动到内容的末尾并删除一个contentSize
减少的项目时,问题就来了:这会导致contentOffset
改变,但改变不是动画的。而是contentOffset
在删除动画完成后立即跳转。我已经尝试手动更新contentOffset
删除旁边的内容,但这对我也不起作用。
我正在使用自定义布局,但我看到与标准流布局相同的行为,使用以下代码:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.items.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
UILabel *label = (UILabel *)[cell viewWithTag:1];
label.text = [self.items objectAtIndex:indexPath.item];
return cell;
}
- (IBAction)addItem:(UIBarButtonItem *)sender
{
self.runningCount++;
[self.items addObject:[NSString stringWithFormat:@"Item %u",self.runningCount]];
[self.collectionView performBatchUpdates:^{
[self.collectionView insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:self.items.count-1 inSection:0]]];
} completion:nil];
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
[self.items removeObjectAtIndex:indexPath.item];
[self.collectionView performBatchUpdates:^{
[self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
} completion:nil];
}
我觉得我一定错过了一些明显的东西,但这让我很难过。