UICollectionView的哪个页面可见?

时间:2017-05-03 05:24:49

标签: ios swift uicollectionview

现在我有一个UICollectionView设置水平分页。我调整了我的单元格以适应屏幕,因此只有一个可见(除非你正在滚动)。

我想要做的是在停止滚动后获取视图中单元格的索引路径。这是因为视图的其他部分取决于当前可见的信息。

我在scrollViewWillBeginDecelerating函数中设置了一个函数,我很接近,但我似乎还不明白它是如何抓住单元格的。

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {

    if( lastContentOffset > scrollView.contentOffset.x && lastPointVisited > 0)
    {
        lastPointVisited -= 1

        print("Scrolling Right")
    }
    else if(lastContentOffset < scrollView.contentOffset.x && lastPointVisited < myPoints.count - 1)
    {
        lastPointVisited += 1

        print("Scrolling Left")
    }

    lastContentOffset = scrollView.contentOffset.x
}

如果我非常小心滚动,这会让我得到准确的结果。快速移动或只有一半滚动页面使其快速向后移动似乎会将所有内容都抛弃。

4 个答案:

答案 0 :(得分:0)

它对我有用如果我在同一时间将相同的代码放在这两个代表中

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    //code here
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    //code here
}

而不是写在

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView)

它给出了索引的确切值,无论是快速滚动还是半滚动。

希望它有所帮助!

答案 1 :(得分:0)

您可以使用以下代码获取页码

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        let pageWidth = scrollView.frame.size.width
        let page = Int(floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1)
        print("Page Number : \(page)")
    }

答案 2 :(得分:0)

试试这个,

 func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
        let cellObj = collectionViewDemo.visibleCells[0]
        print(collectionViewDemo.indexPath(for: cellObj))
    }

答案 3 :(得分:0)

您可以使用以下代码来查找可见的collectionView页面

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    let pageWidth = scrollview.frame.width
    let pageIndex = scrollview.frame.width
                let indexTemp = Int((scrollview.contentOffset.x + 
     pageWidth / 2) / pageWidth)

       print(pageIndex)

}