【问题标题】:UICollectionView indexPathsForVisibleItems not working for some caseUICollectionView indexPathsForVisibleItems 在某些情况下不起作用
【发布时间】:2017-06-29 14:46:20
【问题描述】:

我有一个 UICollectionView,每个页面的大小都与屏幕完全相同。滚动方向是水平的。我想在视图滚动时获取当前可见的单元格。

例如,如果我在一整页上,我只是得到这个页面的索引,如果我在两页中间滚动,那么我可以得到这两个页面的索引。我知道有indexPathsForVisibleItems 方法。它适用于在中间滚动时的情况。它将返回两个单元格的索引。

但如果我在整个页面上,它也会返回两个页面。更奇怪的是,这发生在我的 iPhone 7 Plus 上,但是当我在 iPhone 6s 上测试它时,它工作正常并返回当前页面的单个索引。

似乎该方法不适用于大屏幕?

我的收藏视图:

    CGSize screenSize = [UIScreen mainScreen].fixedBounds.size;
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    flowLayout.minimumLineSpacing = 0.0;
    flowLayout.minimumInteritemSpacing = 0.0;
    flowLayout.itemSize = screenSize;

    UIColloctionView *collectionView =
        [[UICollectionView alloc] initWithFrame:SCRectMakeWithSize(screenSize) collectionViewLayout:flowLayout];
    collectionView.backgroundColor = [UIColor clearColor];
    collectionView.scrollsToTop = NO;
    collectionView.pagingEnabled = YES;
    collectionView.showsHorizontalScrollIndicator = NO;
    collectionView.showsVerticalScrollIndicator = NO;

我用来获取当前可见索引的方法:

    NSArray<NSIndexPath *> *indexPaths = [_tabsCollectionView indexPathsForVisibleItems];

在大屏幕上,当我查看整个页面时,这将返回 2 个项目。

【问题讨论】:

  • 一些相关代码会有所帮助。
  • 我不知道您的问题,但另一种解决方法可能是检查滚动偏移以检索 indexPath。如果只有一个部分,多行或每个部分一行,则更容易。

标签: ios objective-c uicollectionview


【解决方案1】:

即使我也面临着类似的问题。

对我有用的解决方法如下

Swift 3 解决方案

    var visibleRect    = CGRect()
    visibleRect.origin = collectionView.contentOffset
    visibleRect.size   = collectionView.bounds.size
    let visiblePoint   = CGPoint(x: visibleRect.midX, y: visibleRect.midY)

    guard let visibleIndexPath: IndexPath = collectionView.indexPathForItem(at: visiblePoint) else { return }
    print(visibleIndexPath)

希望此解决方案对您有用。

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多