ios - Swift iOS -CollectionView 如何将单元格滚动到屏幕外
问题描述
我有一个带有 4 个单元格的 collectionView。由于集合视图内只有 4 个单元格,因此不会再滚动。
向上滚动时,我想将 4 个单元格从屏幕上滚动出来(collectionView 将显示为空)。一旦单元格离开屏幕,我希望滚动停止,我不想永远滚动。向下滚动时,我想将 4 个单元格滚动回场景中。
我尝试更改collectionView.bounds.origin
,collectionView.contentSize.height
但都没有工作,我仍然无法将 4 个单元格滚动到屏幕之外。
我总是可以添加透明单元格,但这似乎是一个 hack。
实现此目的的适当方法是什么?
override func viewDidLoad() {
super.viewDidLoad()
let layout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)
layout.scrollDirection = .vertical
collectionView = UICollectionView(frame: view.frame, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.alwaysBounceVertical = true
collectionView.backgroundColor = .white
collectionView.register(MyCell.self, forCellWithReuseIdentifier: myCell)
view.addSubview(collectionView)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 4
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: myCell, for: indexPath) as! MyCell
cell.textLabel.text = "Hello"
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: 44)
}
解决方案
您可以使用滚动视图的contentInset
:
collectionView?.contentInset.bottom = collectionView?.frame.height ?? 0
推荐阅读
- objective-c - 我想将 SwiftUI 视图(这是不可见的,我的意思是不渲染视图)转换为 Image/PDF
- javascript - React 函数内部组件的条件渲染不起作用
- json - 在 CURL GET 中使用变量
- perl - perl-5.16.0-LWP-Protocol-Connect-6.09.tgz 是否支持 TLS 1.2?
- android - 停止显示应用程序的推送通知 - Android
- asp.net-core - 如何使用基于微服务的 Asp.Net Core 和 Angular 构建多租户 SAAS 应用程序(为每个服务使用清洁架构)
- android - Applogic SDK 中所有聊天的未读消息总数
- node.js - 单个对象中的内部连接续集 ORM
- azure - Azure Logic-app trackedProperties 中 trackedProperties_NAME_g 和 trackedProperties_NAME_s 的意义?
- c++ - 扩展类中可选虚函数,运行时测试是否存在