首页 > 解决方案 > Swift iOS -CollectionView 如何将单元格滚动到屏幕外

问题描述

我有一个带有 4 个单元格的 collectionView。由于集合视图内只有 4 个单元格,因此不会再滚动。

向上滚动时,我想将 4 个单元格从屏幕上滚动出来(collectionView 将显示为空)。一旦单元格离开屏幕,我希望滚动停止,我不想永远滚动。向下滚动时,我想将 4 个单元格滚动回场景中。

我尝试更改collectionView.bounds.origincollectionView.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)
}

标签: iosswiftuiscrollviewuicollectionviewuicollectionviewcell

解决方案


您可以使用滚动视图的contentInset

collectionView?.contentInset.bottom = collectionView?.frame.height ?? 0

推荐阅读