Как анимировать вставки в коллекцию без нарушения работы других ячеек? - PullRequest
0 голосов
/ 10 января 2019

У меня есть collectionView, в котором ячейки выровнены по левому краю, а ширина ячейки основана на длине строки. Аналогично макету представления тегов.

Я просмотрел краткое руководство по анимации вставок: https://littlebitesofcocoa.com/306-customizing-collection-view-cell-insertion-animations

Ячейки предыдущего ряда расширяются и возвращаются в исходное положение.

Я попытался вставить ячейки без анимации, и то же самое происходит, и это связано с выравниванием по левому краю с переменной шириной ячейки.

Вот код для выравнивания моих ячеек по левому краю в пользовательском UICollectionViewFlowLayout:

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let attributes = super.layoutAttributesForElements(in: rect)

        var leftMargin = sectionInset.left
        var maxY: CGFloat = -1.0
        attributes?.forEach { layoutAttribute in
            if layoutAttribute.frame.origin.y >= maxY {
                leftMargin = sectionInset.left + 8
            }

            layoutAttribute.frame.origin.x = leftMargin

            leftMargin += layoutAttribute.frame.width + minimumInteritemSpacing
            maxY = max(layoutAttribute.frame.maxY , maxY)
        }

        return attributes
    }

и анимация с помощью:

override func initialLayoutAttributesForAppearingItem(at itemIndexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
        let attributes = super.initialLayoutAttributesForAppearingItem(at: itemIndexPath)

        if insertingIndexPaths.contains(itemIndexPath) {
            attributes?.alpha = 0.0
            attributes?.transform = CGAffineTransform(
                translationX: 0,
                y: 500
            )
        }

        return attributes
    }

Я ожидал, что это будет выглядеть так: https://imgur.com/cbWq6CI

Но это выглядит так (фактическая запись): https://imgur.com/xfKZYnr

1 Ответ

0 голосов
/ 10 января 2019

У меня был этот код в моем UICollectionViewFlowLayout подклассе:

required init(minimumInteritemSpacing: CGFloat = 8, minimumLineSpacing: CGFloat = 8, sectionInset: UIEdgeInsets = .zero) {
    super.init()
    estimatedItemSize = UICollectionViewFlowLayout.automaticSize
    self.minimumInteritemSpacing = minimumInteritemSpacing
    self.minimumLineSpacing = minimumLineSpacing
    self.sectionInset = sectionInset
    sectionInsetReference = .fromSafeArea
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

Я только что удалил estimatedItemSize = UICollectionViewFlowLayout.automaticSize и больше нет движения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...