我有一個UICollectionView
可以添加和刪除單元格。我正在使用performBatchUpdates
進行這些更改,並且佈局按預期動畫化。在deleteItemsAtIndexPaths的UICollectionView中動畫contentOffset更改
當我滾動到內容的結尾並刪除一個項目,使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];
}
我覺得我必須缺少明顯的東西,但是這有我難倒。
我希望你不介意我問,但我不知道你是否遇到類似的情況,刪除一個項目,這樣'contentSize'縮小&視圖滾動導致滾動到視圖中的項目不會出現,直到刪除動畫完成?重現的代碼與您發佈的代碼幾乎完全相同,所以我想你一定也看過它了?我[發佈了一個問題](http://stackoverflow.com/q/25528337/429427)解釋它;如果你有時間看一看,我會很感激。 – Stuart