我有一个水平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 能够执行
,但转换仍然明显错误。关于如何解决这个问题的任何想法?
答案 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];
}];