Swift 中特定部分的 UICollectionView 粘性 header

UICollectionView sticky header for specific section in Swift

我正在尝试为特定部分创建一个粘性补充 header,当特定部分触及导航时它始终保持在顶部并且不会与其他部分重叠 header秒。到目前为止,我找到的解决方案一直有效到 900 collectionView.contentOffset.y。我跟着这个代码 StickyLayout.swift.

而且我必须设置 sectionHeadersPinToVisibleBounds = false,因为我只想在滚动 up/down 时在顶部粘贴一个 header,具体取决于位置。其他段headers应该不会推出粘header.

因为我在 Swift 中这样做,所以在 Swift 中有一个例子会很棒。

这导致在 for 循环中迭代时 header 的布局属性未包含在属性数组中,导致布局位置不再调整到其 "sticky"位于屏幕顶部。

在 for 循环之前添加这些行以将粘性 header 的布局属性添加到属性数组(如果它们不存在):

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {

    var layoutAttributes = [UICollectionViewLayoutAttributes]()

    guard let cellLayoutAttributesInRect = super.layoutAttributesForElements(in: rect) else { return nil }

    // add the sticky header's layout attribute to the attributes array if they are not there
    if let stickyHeaderIndexPath = stickyHeaderIndexPath,
        let stickyAttribute = layoutAttributesForSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, at: stickyHeaderIndexPath),
        !layoutAttributes.contains(stickyAttribute) {
        layoutAttributes.append(stickyAttribute)
    }

    return layoutAttributes
}