如何设置collectionView的contentOffset,以使单元格居中?

我的设置:

  • 已打开分页的ScrollView。我有3个子视图(代表页面)

  • 一个CollectionView,其中包含3个带有标签的单元格。这些标签包含我3页的标题。

我要做什么:

将页面滚动到其中后,我希望关联的页面标题捕捉到中间。当前标题紧靠左侧,这不是我想要的。

当前情况如何:

如何设置collectionView的contentOffset,以使单元格居中?

我的代码:

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    // currentPage Int 0,1,and 2 represent my 3 pages
    let indexPath = IndexPath(item: scrollView.currentPage,section: 0)

    // This is my collectionView with the cells that contain titles
    let collectionView = self.homeViewModel.menuTabsCollectionView

    // Here I get the width of the cell for the current page
    guard let currentCellWidth = collectionView.cellForItem(at: indexPath)?.frame.size.width else {
        return
    }

    // Disable vertical scroll
    scrollView.contentOffset.y = 0

    print("OFFSET \(scrollView.contentOffset.x)")
    print("CELL WIDTH \(currentCellWidth)")

    if scrollView.currentPage == 0 {

        collectionView.contentOffset.x = scrollView.contentOffset.x / 3
    }

    if scrollView.currentPage == 1 {

        collectionView.contentOffset.x = scrollView.contentOffset.x / 3
    }

    if scrollView.currentPage == 2 {

        collectionView.contentOffset.x = scrollView.contentOffset.x / 3
    }
}

到目前为止,我所做的是将scrollViews contentOffset锁定到collectionView的contentOffset,并且我已经放慢了collectionView与滚动视图一起滚动的速度。

我需要使用collectionView单元格的宽度以及scrollView的contentOffset来计算collectionView应与scrollView成比例地移动多少,并使每个页面的标题都在中间居中页面滚动到视图中的时间。

每个页面都有if语句的原因是,公式中使用的宽度会根据滚动到哪个页面而有所不同。

我似乎无法弄清楚如何获得中心头衔。如果我使用scrollToCellAtIndexPath委托方法,则会失去视差效果。

我非常感谢您在这里提供的一些输入/答案。

预先感谢

Venus0808 回答:如何设置collectionView的contentOffset,以使单元格居中?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3148932.html

大家都在问