CollectionView:HeaderView Bounce

时间:2018-04-18 10:34:09

标签: swift uicollectionview

对CollectionView来说很新,所以希望在这里有一个方向。

我有一个启用了标题的CollectionView。一切正常但我希望在滚动主要部分时HeaderView保持静止。

问题:

  • 在iOS中可以使用collectionview吗?或者我必须为标题创建一个专用的静态视图?

我在UICollectionViewFlowLayout

中设置了以下内容
    if let layout: UICollectionViewFlowLayout = self.collectionViewLayout as? UICollectionViewFlowLayout {
        layout.scrollDirection = .vertical
        layout.sectionHeadersPinToVisibleBounds = true
    }

使标题的行为如下:

  • 当向下滚动主集合时,标题会一直向上,直到它的下边距到达屏幕顶部,然后在屏幕中间串起来
  • 当上升时,标题跟随主要集合并被隐藏

我很确定我不是唯一一个遇到此问题的人。也许我在这里做错了什么?

1 个答案:

答案 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。