UICollectionView获取当前item的NSIndexPath问题

当我们使用UICollectionView实现,无线轮播滚动时(整页滚动。可视区域只会显示一个item), 采用多个分区的形式, 每次滚动完之后,会无动画滚动到中间的分区,这样就实现了无线滚动的效果。

通过UIScrollView-scrollViewDidEndDecelerating:方法得到indexPath更新的时刻, 然后用[collectionView indexPathsForVisibleItems]获取一组当前显示的cell们的indexPath的数组,和上面的方案一样,我只要取里面的第一个.

在这里插入图片描述
当我们采用上面两种方式,回去当前的显示cell或则indexPath时, 在我们快速手动滚动的时候, 虽然在视觉上看到只显示一个item, 但是实际上有时候我们获取是多个cell或则indexPath的情况,并且顺序是不一定的, 导致我们通过firstobject或则lastobject的方式获取的item可能是错误的, 导致滚动顺序错乱。注意:对获取之后的数组进行排序也是不可取的, 也会造成顺序错乱

解决方法:

// 监听UIScrollView的滑动停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    // UICollectionView的宽度和Cell宽度相等: 当手指快读滑动时, 有时indexPathsForVisibleItems() 获取的indexPath不一定只有一个cell,有时候会出现两个,而且顺序不一定正确。
    NSIndexPath *currentIndexPath = [self.videoCollectionView indexPathForItemAtPoint:self.videoCollectionView.contentOffset];
    if (currentIndexPath && currentIndexPath.row < self.datas.count) {
        NSIndexPath *currentIndexPathReset = [NSIndexPath indexPathForItem:currentIndexPath.row inSection:maxSection / 2];
        [self.videoCollectionView scrollToItemAtIndexPath:currentIndexPathReset atScrollPosition:UICollectionViewScrollPositionNone animated:NO];
        
        self.pageControl.currentIndex = currentIndexPathReset.row;
    }
}

我们这里可以通过方法:- (nullable NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point; 通过指定坐标来获取当前正在显示的cell,该方法可以获取正在显示的item的NSIndexPath, 得到正确的下标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值