集合视图仅滚动项目

时间:2017-09-19 08:12:19

标签: ios uicollectionview

我有集合视图,其中每个单元格实际上是一个获取整个屏幕的表格视图。我想只滚动到下一个表(它水平放置)。所以,我希望在任何时候屏幕上只有一个表。因此,当用户向右滑动时,滚动视图会更改其内容以隐藏当前表格视图并显示另一个。

我可以通过实现手势识别器来获取该行为并手动更改滚动视图contentOffset,但我想有一种简单的方法可以做到这一点。

如何实现我需要的行为?

1 个答案:

答案 0 :(得分:1)

如果CollectionView的每个单元格都覆盖了collectionView的整个宽度,则可以在CollectionView上启用分页。

enter image description here

最后如果您想在不启用分页的情况下执行此操作,则可以创建UICollectionView布局的子类

class YourCollectionViewLayout: UICollectionViewFlowLayout {

        override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
            var offsetAdjustment = CGFloat.greatestFiniteMagnitude

            let horizontalOffset = proposedContentOffset.x + 5 //your cell inset
            let targetRect = CGRect(origin: CGPoint(x: proposedContentOffset.x, y: 0), size: self.collectionView!.bounds.size)

            for layoutAttributes in super.layoutAttributesForElements(in: targetRect)! {
                let itemOffset = layoutAttributes.frame.origin.x
                if (abs(itemOffset - horizontalOffset) < abs(offsetAdjustment)) {
                    offsetAdjustment = itemOffset - horizontalOffset
                }
            }

            return CGPoint(x: proposedContentOffset.x + offsetAdjustment, y: proposedContentOffset.y)
        }
    }