具有流式布局的 UICollectionView 不会将多个项目放在一行上
Posted
技术标签:
【中文标题】具有流式布局的 UICollectionView 不会将多个项目放在一行上【英文标题】:UICollectionView with flow layout won't put multiple items on one line 【发布时间】:2014-11-17 19:35:13 【问题描述】:我有一个collectionView,我试图在其中创建一个网格样式布局。我现在使用的是 flowLayout 和标准 UICollectionViewCell,但我似乎无法让 collectionView 将多个项目放在同一行,因为我相信 flowLayout 默认情况下应该这样做。这是我的 collectionView 代码:
查看控制器初始化代码:
override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!)
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .Horizontal
collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: layout) super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell")
collectionView.backgroundColor = UIColor.whiteColor()
查看已加载:
collectionView.frame = self.view.bounds
collectionView.reloadData()
self.view.addSubview(collectionView)
委托和数据源:
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return 5
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
return 1
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
return CGSize(width: 40, height: 40)
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as UICollectionViewCell
func getRandomColor() -> UIColor
var randomRed:CGFloat = CGFloat(drand48())
var randomGreen:CGFloat = CGFloat(drand48())
var randomBlue:CGFloat = CGFloat(drand48())
return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, alpha: 1.0)
cell.backgroundColor = getRandomColor()
return cell
这就是我得到的:
单元格不应该横向构建直到collectionView的框架边缘被击中,然后转到新行吗? 知道为什么这没有发生吗?
谢谢,
【问题讨论】:
【参考方案1】:你有1个部分吗?
如果您有多个部分,默认情况下会将单元格移动到下一行。将节数设置为 1 并将单元格数设置为多个将解决此问题。
【讨论】:
【参考方案2】:您确定正在调用您的提供大小的方法吗?我在您的代码中的任何地方都没有看到 layout.delegate = self 。此外,您可以在初始化时指定 itemSize
var flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = CGSizeMake(40, 40)
另外,你真的要使用 scrollDirection = Horizontal 吗?如果是这种情况,那么您的集合视图高度应该等于项目高度,或者您需要有足够的项目来填充屏幕等等,以便它滚动
【讨论】:
以上是关于具有流式布局的 UICollectionView 不会将多个项目放在一行上的主要内容,如果未能解决你的问题,请参考以下文章
具有多个 CollectionViewLayout 的单个 UICollectionView。为啥布局混乱?
具有自定义布局的 UICollectionView 变为空白
具有特定于部分的布局和粘性标题的 UICollectionView
UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小