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
}
我正在尝试为特定部分创建一个粘性补充 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
}