iOS - 带有内容插入的粘性标题 - 标题视图不像单元格那样滚动
Posted
技术标签:
【中文标题】iOS - 带有内容插入的粘性标题 - 标题视图不像单元格那样滚动【英文标题】:iOS - Sticky headers with content inset - Header view is not scrolling like the cell 【发布时间】:2019-03-03 00:52:40 【问题描述】:我们尝试将UICollectionView
像列表一样滚动到地图上。不要将这与卡在一个点(如低、中和高)的底部工作表相混淆。集合视图的 flowlayout 属性启用了sectionHeadersPinToVisibleBounds
。我附上了示例项目供您参考。当用户滚动时,标题视图是否可以移动到集合视图的顶部?
Here是示例项目
我需要进行基本的更改才能进入该状态:
let layout = UICollectionViewFlowLayout()
layout.sectionHeadersPinToVisibleBounds = true
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 0
let collectionView = UICollectionView(frame: .zero,
collectionViewLayout: layout)
override func viewWillLayoutSubviews()
super.viewWillLayoutSubviews()
collectionView.contentInset = UIEdgeInsets(top: drawerHeight, left: 0, bottom: 0, right: 0)
这是您将看到的屏幕截图:
红色视图是固定的标题视图。我是否需要自定义布局来在用户滚动时更新其位置?
【问题讨论】:
【参考方案1】:我从post 获得灵感,编写了一个自定义的 StickyHeaderLayout。这是我的错误的修复:
class StickyHeaderLayout: UICollectionViewFlowLayout
override init()
super.init()
configureLayout()
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
configureLayout()
private func configureLayout()
self.sectionFootersPinToVisibleBounds = true
self.sectionHeadersPinToVisibleBounds = true
minimumLineSpacing = 0
minimumInteritemSpacing = 0
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]?
guard let attributes = super.layoutAttributesForElements(in: rect) else return nil
for attribute in attributes
adjustAttributesIfNeeded(attribute)
return attributes
override func layoutAttributesForSupplementaryView(ofKind elementKind: String, at indexPath: IndexPath) -> UICollectionViewLayoutAttributes?
guard let attributes = super.layoutAttributesForSupplementaryView(ofKind: elementKind, at: indexPath) else return nil
adjustAttributesIfNeeded(attributes)
return attributes
func adjustAttributesIfNeeded(_ attributes: UICollectionViewLayoutAttributes)
switch attributes.representedElementKind
case UICollectionView.elementKindSectionHeader?:
adjustHeaderAttributesIfNeeded(attributes)
default:
break
private func adjustHeaderAttributesIfNeeded(_ attributes: UICollectionViewLayoutAttributes)
guard let collectionView = collectionView else return
guard attributes.indexPath.section == 0 else return
if collectionView.contentOffset.y <= 0
attributes.frame.origin.y = 0
else
attributes.frame.origin.y = collectionView.contentOffset.y
【讨论】:
正是我需要的。【参考方案2】:一个部分是工作,但如果你有超过一个部分,它会引起一些问题
【讨论】:
以上是关于iOS - 带有内容插入的粘性标题 - 标题视图不像单元格那样滚动的主要内容,如果未能解决你的问题,请参考以下文章
带有侧导航和内容区域的 CSS3/HTML5 粘性页眉/页脚