UICollectionView捕捉到0,0 - 滚动过去的边界

时间:2017-10-19 06:28:48

标签: ios swift uicollectionview

我有一个横向集合视图。基本上,第一个显示的项目是"活动"项目。然后将按钮滑动到每个项目上。

我遇到的问题是我需要能够滚动最后一个项目以一直捕捉到前面。目前,当拖动到最后时,它不再与第一个单元格对齐。

很抱歉,如果我没有任何意义。基本上每个单元格的最左边框架都应该捕捉到collectionView的0,0。目前适用于前2个单元格。但在那之后,它达到了界限并且不允许它突然出现。我希望能够拖动并将最终单元格捕捉到0,0

谢谢!

在此处查看问题:

enter image description here

这是我的布局子类:

class UserFlowLayout: UICollectionViewFlowLayout {
    required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }

    override init() {
        super.init()
        scrollDirection = .horizontal
        itemSize = CGSize(width: 70, height: 90)
        minimumInteritemSpacing = 15.0
        minimumLineSpacing = 15.0
    }

    override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
        guard let collectionView = collectionView else { return super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity) }

        var offsetAdjustment = CGFloat.greatestFiniteMagnitude
        let horizontalOffset = proposedContentOffset.x + collectionView.contentInset.left

        let targetRect = CGRect(x: proposedContentOffset.x, y: 0, width: collectionView.bounds.size.width, height: collectionView.bounds.size.height)

        let layoutAttributesArray = super.layoutAttributesForElements(in: targetRect)

        layoutAttributesArray?.forEach({ (layoutAttributes) in
            let itemOffset = layoutAttributes.frame.origin.x
            if fabsf(Float(itemOffset - horizontalOffset)) < fabsf(Float(offsetAdjustment)) {
                offsetAdjustment = itemOffset - horizontalOffset
            }
        })

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

}

1 个答案:

答案 0 :(得分:0)

在我看来,它正试图向右滚动,而不是向右滚动。您需要加宽滚动视图以在右侧包含空白区域。

您当前的屏幕宽度似乎是4个单元格+ X,所以在最后一个单元格之后需要+ X的空格。