所以我在我的 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)