对CollectionView来说很新,所以希望在这里有一个方向。
我有一个启用了标题的CollectionView。一切正常但我希望在滚动主要部分时HeaderView保持静止。
问题:
我在UICollectionViewFlowLayout
中设置了以下内容 if let layout: UICollectionViewFlowLayout = self.collectionViewLayout as? UICollectionViewFlowLayout {
layout.scrollDirection = .vertical
layout.sectionHeadersPinToVisibleBounds = true
}
使标题的行为如下:
我很确定我不是唯一一个遇到此问题的人。也许我在这里做错了什么?
答案 0 :(得分:0)
layout.sectionHeadersPinToVisibleBounds = true
使你的标题:
我看到你希望标题始终处于静止状态。当然,正如你所说,你可以在collectionView的顶部添加一个UIView,它可以完成这项工作。一个不同的解决方案可能是这样的:
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "header", for: indexPath)
headerContainer.backgroundColor = .yellow
headerContainer.frame = header.frame
header.layer.masksToBounds = false // that's important
header.addSubview(self.headerContainer)
return header
}
所以基本上,我们在标题中添加了一个子视图(标题需要透明)。现在,我们正在使用UICollectionView可滚动的事实:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let offset = scrollView.contentOffset.y
if offset < 0 {
headerContainer.transform = CGAffineTransform(translationX: 0, y: offset)
}
}
因此,如果我们向下滚动偏移值,我们通过将偏移值添加到其Y位置来转换容器。
不幸的是,我没有提出向上滚动的情况(它在一段时间后仍然开始隐藏) - 我想这是可行的。
我基于这个主题: TableView header bouncing
我想我宁愿在UICollectionView之外创建一个UIView。