Пользовательский заголовок CollectionView исчезает во время прокрутки (Custom UICollectionFlowLayout) - PullRequest
0 голосов
/ 01 апреля 2020

Я делаю пользовательский UICollectionViewFlowLayout и хочу, чтобы мой второй и единственный второй заголовок «прикалывался» к вершине во время прокрутки, создавая эффект плавающего заголовка. Однако в моем текущем коде заголовок закреплен, но исчезает после определенного смещения содержимого, но затем снова появится, если вы прокрутите назад.

class StickyLayout: UICollectionViewFlowLayout {

    let kind = UICollectionView.elementKindSectionHeader

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

        layoutAttributes?.forEach({ (attributes) in

            if(attributes.representedElementKind == kind && attributes.indexPath.section == 1) {
                guard let collectionView = collectionView else { return }
                let contentOffset = collectionView.contentOffset.y
                var headerFrame = attributes.frame
                headerFrame.size.height = 90

                if(contentOffset > 300) {
                    headerFrame.origin.y = contentOffset
                    attributes.frame = headerFrame
                }
            }
        })
        return layoutAttributes
    }

    override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
        return true
    }
 }

1 Ответ

0 голосов
/ 01 апреля 2020

Нашел решение. Проблема заключалась в том, что заголовок больше не был в прямоугольнике после определенного расстояния. Таким образом, вы должны добавить атрибуты заголовка прямо перед их циклом. Похоже, что добавление этого права до my for l oop устранило проблему.

let stickyIndexPath = IndexPath(item: 0, section: 1)
if let headerAttributes = layoutAttributesForSupplementaryView(ofKind: kind, at: stickyIndexPath) {
    if !layoutAttributes!.contains(headerAttributes) {
        layoutAttributes?.append(headerAttributes)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...