如何让 UICollectionView 连续水平滚动而不是创建第二行?
Posted
技术标签:
【中文标题】如何让 UICollectionView 连续水平滚动而不是创建第二行?【英文标题】:How do I get UICollectionView to continuously scroll horizontally instead of creating a second row? 【发布时间】:2020-03-24 13:45:18 【问题描述】:为了防止 UICollectionView 在我的水平集合视图中创建第二行,调整 UICollectionView 的宽度以匹配单元格数量 * 它们的宽度的正确方法是什么。
是否有特定的方法可以为 CollectionView 实现以允许我进行设置?
目前的样子:
目前,我正在实现以下方法:
func numberOfSections(in collectionView: UICollectionView)
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int)
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath)
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewDelegateFlowLayout, sizeForItemAt indexPath: IndexPath)
【问题讨论】:
如果你为collectionview设置了一个固定高度,只有一行可以垂直放置,那么你将拥有单行可滚动的水平collectionview。 【参考方案1】:首先将你的collectionView FlowLayout scrollDirection 设置为水平。
let myColl:UICollectionView =
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
let coll = UICollectionView(frame: .zero, collectionViewLayout: layout)
return coll
()
然后将您的collectionview高度约束设置为等于(或稍微大于)单元格高度
myColl.heightAnchor.constraint(equalToConstant: 50).isActive = true
在这里设置你的单元格大小
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
return CGSize(width: view.frame.width-32, height: 50)
【讨论】:
【参考方案2】:对于任何想知道的人,Dilan 的回答也适用于使用 Storyboard 创建和链接的 UICollectionView。
只需按照 Dilan 在您的 viewDidLoad() 函数中建议的操作即可。
override func viewDidLoad() myColl.heightAnchor.constraint(equalToConstant: 50).isActive = true
确保您的类(如果还不是 UICollectionViewController)是 UICollectionViewFlowDelegate 的子类。
class MyClass: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout
如果不这样做,
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
return CGSize(width: view.frame.width-32, height: 50)
不会被调用。
【讨论】:
以上是关于如何让 UICollectionView 连续水平滚动而不是创建第二行?的主要内容,如果未能解决你的问题,请参考以下文章
UITableView中的多个UICollectionView在滚动中交织在一起