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

时间:2017-05-11 17:02:33

标签: ios swift

所以我在我的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 个答案:

答案 0 :(得分:2)

您可以尝试collectionView.alwaysBounceVertical = true

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

编辑:

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

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