所以我在我的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个单元格,我希望这种情况发生。
如果集合视图中只有一个单元格,我希望集合视图仍然可以滚动,当用户向下滚动时,单元格将位于屏幕顶部,而标题会消失。
道歉如果难以理解,有点难以解释。
答案 0 :(得分:2)
您可以尝试collectionView.alwaysBounceVertical = true
。
根据文件: 如果此属性设置为true且跳出为true,则即使内容小于滚动视图的边界,也允许垂直拖动。默认值为false。
编辑:
如果您希望标题元素滚动,即使没有足够的单元格使集合视图contentSize
大于其frame
。我想你可能会考虑以下布局:
ScrollView(Height: A, ContentHeight: A+B)
HeaderView(Height: B)
CollectionView(Height: A)