【问题标题】:CollectionView: HeaderView BounceCollectionView: HeaderView 反弹
【发布时间】:2018-09-28 13:35:24
【问题描述】:

对 CollectionView 还很陌生,所以希望在这里有一个方向。

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

问题:

  • 在给定集合视图的 iOS 中这可能吗?或者我必须为标题创建一个专用的静止视图?

我在 UICollectionViewFlowLayout 中设置了以下内容

    if let layout: UICollectionViewFlowLayout = self.collectionViewLayout as? UICollectionViewFlowLayout {
        layout.scrollDirection = .vertical
        layout.sectionHeadersPinToVisibleBounds = true
    }

这使得标题的行为如下:

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

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

【问题讨论】:

    标签: swift uicollectionview


    【解决方案1】:
    layout.sectionHeadersPinToVisibleBounds = true
    

    这就是你的标题:

    • 当您向下滚动时,坚持单元格
    • 开始隐藏在单元格bot到达标题的bot之后

    我看到您希望标题始终保持静止。当然,正如您所说,您可以在 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。

    【讨论】:

    • 谢谢。如何在主集合视图上添加上边距而不将其添加到标题?如果我使用 override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 这将被添加到整个collectionview。
    • 你能更详细地解释你的问题吗?标题和第一个单元格之间需要空格吗?如果是这样 - 两个选项 - 将空白 UIView 添加到 headerContainer 下的标题或使第一个单元格宽为屏幕并为空(如果 indexPath.row == 0 { //cell.width = ... background = white hide buttons})跨度>
    • 当然。我需要在 headerView 之后的 collectionView 顶部放置一个 tabBar。这样我就可以改变标签的collectionView onClick。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多