在启用本机分页的情况下查看UICollectionView中的上一个/下一个单元?

时间:2018-06-21 11:25:11

标签: ios uicollectionview uicollectionviewlayout

我想使集合视图在单元格中分页并居中,但是像这样显示上一个和下一个单元格的一部分:

enter image description here

那里有大量的黑客工具,但我想通过UICollectionView的本机分页属性来实现。将单元格设为集合视图的全宽不会显示上一个/下一个单元格,而使单元格宽度变小也不会在分页时对齐到中心。

例如,是否有可能使集合视图占屏幕宽度的80%,并让上一个/下一个单元格在边界外流血(不限制边界)?

enter image description here

或者使用本机分页来实现此目的的任何其他想法?

2 个答案:

答案 0 :(得分:1)

iOS Swift 4

使用以下两种方法来适应上一个和下一个屏幕。

private func calculateSectionInset() -> CGFloat {
    let deviceIsIpad = UIDevice.current.userInterfaceIdiom == .pad
    let deviceOrientationIsLandscape = UIDevice.current.orientation.isLandscape
    let cellBodyViewIsExpended = deviceIsIpad || deviceOrientationIsLandscape
    let cellBodyWidth: CGFloat = 236 + (cellBodyViewIsExpended ? 174 : 0)
    let buttonWidth: CGFloat = 50
    let inset = (collectionFlowLayout.collectionView!.frame.width - cellBodyWidth + buttonWidth) / 4
    return inset
}

private func configureCollectionViewLayoutItemSize() {
    let inset: CGFloat = calculateSectionInset() // This inset calculation is some magic so the next and the previous cells will peek from the sides. Don't worry about it
    collectionFlowLayout.sectionInset = UIEdgeInsets(top: 0, left: inset, bottom: 0, right: inset)
    collectionFlowLayout.itemSize = CGSize(width: collectionFlowLayout.collectionView!.frame.size.width - inset * 2, height: collectionFlowLayout.collectionView!.frame.size.height)
}

请不要忘记在configureCollectionViewLayoutItemSize()的{​​{1}}中调用viewDidLayoutSubviews()方法。

Screenshot

有关更多详细信息,请参见Click Here

答案 1 :(得分:0)

我认为启用本机分页功能不是一种简单的方法。 但是,您可以利用scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)轻松设置自定义分页,以设置所需的目的地。通过添加一些逻辑可以创建分页。 您可以找到示例herehere