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

时间:2016-10-31 04:09:04

标签: ios objective-c uicollectionview uicollectionviewlayout uiscrollviewdelegate

我有一个水平UICollectionViewLayout,它实现targetContentOffsetForProposedContentOffset并使用- (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) { }]; } 来实现自定义fling / paging功能。每个单元几乎都是屏幕的宽度,下一个单元格略微向右显示。功能很好,但我希望能够在当前单元格为索引1时删除索引0处的单元格。我现在能够计算并执行此操作,但删除索引0单元格后,它将滑动到由于当前内容偏移,下一个单元格(旧索引2,新1(删除0后))。我不确定在保持当前布局的同时如何删除索引0。

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

self.collectionview.contentOffset = CGMakePoint(0,0)

所以计算和删除工作正常,但是在删除[0]时,集合视图会滚动到下一个单元格。我不知道如何阻止它。

我在删除后尝试了reboot: 只有 root 能够执行 ,但转换仍然明显错误。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

经过大量的反复试验后,我才得以解决问题。它可能有点hackish但我只是用一个没有持续时间的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];
}];