检查单元格是否完全显示在集合视图中

Aak*_*ave 5 uiscrollview ios uicollectionview uicollectionviewcell swift

我有一个集合视图,其中单元格的大小与集合视图完全相同,因此每个单元格都应占据整个屏幕。我已经实现了一个功能,当它在滚动中拖动或减速时,单元格会被捕捉到完整的视图。这就是用户体验的工作方式。

https://drive.google.com/open?id=1v8-WxCQUzfu8V_k9zM1UCWsf_-Zz4dpr

我想要的是:

正如您从剪辑中看到的那样,单元格会捕捉到整个屏幕。现在,我想在它捕捉后执行一个方法。在部分显示之前或之前不显示。

以下是我为捕捉效果编写的代码:

func scrollToMostVisibleCell(){
    let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
    let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
    let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)!
    collectionView.scrollToItem(at: visibleIndexPath as IndexPath, at: .top, animated: true)
    print("cell is ---> ", visibleIndexPath.row)
}



func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    scrollToMostVisibleCell()
}

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    scrollToMostVisibleCell()
    if !decelerate {
        scrollToMostVisibleCell()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用willDisplayCell方法,那么只要单元格在视图中,它就会立即返回我,即使它只是在collectionView.

有没有办法可以检查单元格是否完全在视图中,然后我可以执行功能?

我已经在这个问题上报废了互联网,但无法找到满意的答案。

Man*_*esh -1

在对单元格进行任何操作之前,用于followedCollectionView.indexPathsForVisibleItems()获取可见单元格visibleIndexPaths并检查您的单元格是否indexPath包含在其中。visibleIndexPathsRef : @anhtu 检查 indexPath 处的单元格在屏幕 UICollectionView 上是否可见

同样来自苹果:var visibleCells: [UICollectionViewCell] { get }。返回集合视图当前显示的可见单元格数组。

  • 单元格隐藏了 10% 但仍然显示该单元格可见 (3认同)