【问题标题】:UICollectionView sticky header for specific section in SwiftSwift 中特定部分的 UICollectionView 粘性标头
【发布时间】:2019-12-26 11:35:40
【问题描述】:
我正在尝试为特定部分创建一个粘性补充标题,当特定部分触及导航时,它始终保持在顶部,并且不会与其他部分标题重叠。到目前为止,我发现的解决方案一直有效到 900 collectionView.contentOffset.y。我跟着这个代码StickyLayout.swift。
我必须设置sectionHeadersPinToVisibleBounds = false,因为我只想在顶部粘贴一个标题,同时根据位置向上/向下滚动。其他部分标题不应推出粘性标题。
因为我在 Swift 中做这件事,所以在 Swift 中有一个例子会很棒。
【问题讨论】:
标签:
ios
swift
uicollectionview
uicollectionviewlayout
contentoffset
【解决方案1】:
这导致当您在 for 循环中迭代时,标题的布局属性不包含在属性数组中,从而导致布局位置不再调整到其在屏幕顶部的“粘性”位置。
在 for 循环之前添加这些行以将粘性标题的布局属性添加到属性数组(如果它们不存在):
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
}