允许 CollectionView 在内容大小大于单元格大小时滚动



所以我在我的 vc 中有一个集合视图,如下所示:

lazy var collectionView : UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    layout.headerReferenceSize = CGSize(width: self.view.frame.width, height: 96 + 42.5)
    let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
    cv.delegate = self
    cv.dataSource = self
    cv.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)
    cv.alwaysBounceVertical = true
    return cv
}()

它的标题总高度为 138.5 像素。 因此,显示单元格的集合视图的内容大小为 view.frame.height - 138.5

在我的收藏视图中,我的单元格每个高度为 176 像素,同时view.frame.width宽,如下所示:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: view.frame.width, height: 176)
}

问题是,当我返回 3 个或更少的单元格计数时,集合视图不可滚动。 如果有 4 个或更多单元格,则标题能够消失,并且只有集合视图中的单元格可见。我希望无论有 1 个单元格还是 4 个单元格,都会发生这种情况。

如果集合视图中只有 1 个单元格,我希望集合视图仍然可以滚动,当用户向下滚动时,单元格将位于屏幕顶部,而标题消失。

抱歉,如果理解

起来令人困惑,有点难以解释。

你可以试试collectionView.alwaysBounceVertical = true

根据文档:如果此属性设置为 true 且弹跳为 true,则即使内容小于滚动视图的边界,也允许垂直拖动。默认值为 false。

编辑:

如果您希望标题元素滚动离开,即使没有足够的单元格使集合视图contentSize大于其frame。我想你可以考虑以下布局:

ScrollView(Height: A, ContentHeight: A+B)
    HeaderView(Height: B)
    CollectionView(Height: A)

相关内容

最新更新