UICollectionview自定义流布局删除单元格

UICollectionview custom flow layout delete cell

我有一个水平 UICollectionView 实现 UICollectionViewLayout 并使用 targetContentOffsetForProposedContentOffset 实现自定义 fling/paging 功能。每个单元格几乎都是屏幕的宽度,下一个单元格稍微向右显示。该功能运行良好,但我希望能够在当前单元格为索引 1 时删除索引 0 处的单元格。我目前能够计算并执行此操作,但在删除索引 0 单元格后,它会滑动到下一个单元格(旧索引 2,新索引 1(删除 0 后))因为当前内容偏移量。我不确定如何在保持当前布局的同时删除索引 0。

现在在我的代表中我正在做:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

float cellWidth = self.collectionView.bounds.size.width  - 20;

float currentPage = self.collectionView.contentOffset.x / cellWidth;


if (currentPage == 1) {
    [self remove:0];
}


}


-(void)remove:(int)i {

    [self.collectionView performBatchUpdates:^{
        [self.data removeObjectAtIndex:0];

        NSIndexPath *indexPath =[NSIndexPath indexPathForRow:0 inSection:0];
        [self.collectionView deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];



    } completion:^(BOOL finished) {


    }];
}

所以计算和删除工作正常,但是删除 [0] 后,集合视图滚动到下一个单元格..我不确定如何停止它。

删除后我试过 self.collectionview.contentOffset = CGMakePoint(0,0),但转换仍然有明显的问题。关于如何解决这个问题有什么想法吗?

经过大量的反复试验,我终于解决了这个问题。这可能有点骇人听闻,但我只是用没有持续时间的 uiview 动画包装了批处理。基本上它会覆盖删除动画

    [UIView animateWithDuration:0 animations:^{
    [self.collectionView performBatchUpdates:^{
        [scrollView setContentOffset:CGPointMake(0, 0) animated:NO];
        [self.data removeObjectAtIndex:0];
        NSIndexPath *indexPath =[NSIndexPath indexPathForRow:0 inSection:0];
        [self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
        [self.collectionView.collectionViewLayout invalidateLayout];
    } completion:nil];
}];