Как переместить несколько ячеек представления коллекции при прокрутке - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть представление коллекции, которое имеет 3 просмотра «на страницу». Когда я прокручиваю, мне нужно, чтобы эти 3 ячейки были перемещены, и они переходят на следующую «страницу». Например, если у меня есть 4 ячейки и прокручиваем представление коллекции, мне нужно, чтобы коллекция переместилась в конфигурацию, где я могу видеть только следующие 3 итена, в данном случае только элемент 4, потому что нет элементов 5 и 6. Я пытаюсь использовать пользовательский FlowLayout, но он не работает.

class CustomFlowLayout: UICollectionViewFlowLayout {

    var mostRecentOffset: CGPoint = CGPoint()

    override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint,
                                      withScrollingVelocity velocity: CGPoint) -> CGPoint {

        if velocity.x == 0 {
            return mostRecentOffset
        }

        if let cv = self.collectionView {

            let cvBounds = cv.bounds
            let halfWidth = cvBounds.size.width * 0.5

            if let attributesForVisibleCells = self.layoutAttributesForElements(in: cvBounds) {

                var candidateAttributes: UICollectionViewLayoutAttributes?
                for attributes in attributesForVisibleCells {

                    if attributes.representedElementCategory != UICollectionElementCategory.cell {
                        continue
                    }

                    if (attributes.center.x == 0) || (attributes.center.x > (cv.contentOffset.x + halfWidth) && velocity.x < 0) {
                        continue
                    }
                    candidateAttributes = attributes
                }

                if proposedContentOffset.x == -(cv.contentInset.left) {
                    return proposedContentOffset
                }

                guard candidateAttributes != nil else {
                    return mostRecentOffset
                }
                mostRecentOffset = CGPoint(x: floor(candidateAttributes!.center.x - halfWidth), y: proposedContentOffset.y)
                return mostRecentOffset

            }
        }


        mostRecentOffset = super.targetContentOffset(forProposedContentOffset: proposedContentOffset)
        return mostRecentOffset
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...