Christian Ray Leovido
Christian Ray Leovido

Reputation: 758

UICollectionView scroll issue with paging enabled after tap

I have a collectionView that returns back to the first cell when I tap a new cell in the second page.

Although it should be the second page, I am getting Page 0.0 in the second one and 0.0 in the first one too.

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

        let pageWidth = collectionCustom.frame.size.width
        let page = floor((collectionCustom.contentOffset.x - pageWidth / 2) / pageWidth) + 1

        print("Page number: \(page)")

    }

I have nothing happening in the didSelectItem method, so why am I getting that scroll?

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: (inout CGPoint)) {

        let pageWidth: Float = Float(collectionCustom.frame.width)
        // width + space
        let currentOffset: Float = Float(collectionCustom.contentOffset.x)
        let targetOffset: Float = Float(targetContentOffset.x)
        var newTargetOffset: Float = 0
        if targetOffset > currentOffset {
            newTargetOffset = ceilf(currentOffset / pageWidth) * pageWidth
        }
        else {
            newTargetOffset = floorf(currentOffset / pageWidth) * pageWidth
        }
        if newTargetOffset < 0 {
            newTargetOffset = 0
        }
        else if newTargetOffset > Float(collectionCustom.contentSize.width) {
            newTargetOffset = Float(collectionCustom.contentSize.width)
        }

        targetContentOffset.x = CGFloat(currentOffset)
        collectionCustom.setContentOffset(CGPoint(x: CGFloat(newTargetOffset), y: CGFloat(0)), animated: true)

        var index: Int = Int(newTargetOffset / pageWidth)

        var cell: UICollectionViewCell? = collectionCustom.cellForItem(at: IndexPath(item: index, section: 0))

        cell = collectionCustom.cellForItem(at: IndexPath(item: index + 1, section: 0))

        }

    }

Upvotes: 3

Views: 1220

Answers (1)

Lalit kumar
Lalit kumar

Reputation: 2207

If you want to current page than you should get you page from scrollview as this

 func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

    let pageNumber = round(scrollView.contentOffset.x / collectionCustom.frame.width) // You can change width according you 
    pageControl.currentPage = Int(pageNumber)

}

Upvotes: 2

Related Questions