如何在启用分页的情况下水平居中UICollectionViewCells? (迅速)

时间:2016-07-03 02:18:56

标签: swift uiscrollview pagination uicollectionview uicollectionviewcell

我已经构建了一个collectionView,我想主要在视图的中心显示一个电影海报。我将在collectionView中显示大约20部电影,所以我想在右边显示下一部电影的一小部分,当我转到下一页时,焦点的电影将居中,与前一部分相同下一部电影分别在左侧和右侧拨出。

通过我的代码方式,当我翻页到下一部电影时,下一部电影根本没有居中,它在x轴上向右移动了太多。如何以编程方式设置分页所需的距离?如何实现collectionView在第一个页面之后正确居中页面的能力?

我的collectionView启用了分页。我还没有创建自定义collectionViewFlowLayout。

Screenshots of my issue Video of my issue

这是我的collectionView和scrollView代码:

extension MainViewController: UICollectionViewDelegateFlowLayout {
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let posterWidth = (collectionView.frame.size.height / 3) * 2
    return CGSizeMake(posterWidth, collectionView.frame.size.height)
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
    let posterWidth = (collectionView.frame.size.height / 3) * 2
    let horizontalInset = (collectionView.frame.size.width - posterWidth) / 2
    return UIEdgeInsetsMake(0, horizontalInset, 0, horizontalInset)
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
    return 20
}
}

---------------

extension MainViewController: UIScrollViewDelegate {
func scrollViewDidScroll(scrollView: UIScrollView) {
    let index = Int(collectionView.contentOffset.x / collectionView.frame.size.width)
    let movie = movies[index]
    updateViews(movie)
}
}

1 个答案:

答案 0 :(得分:0)

尝试使用

[yourCollectionView setPagingEnabled:YES];