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];
}];
我有一个水平 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];
}];