具有流布局的UICollectionView不会在一行上放置多个项目

时间:2014-11-17 19:35:14

标签: ios swift uikit uicollectionview uicollectionviewlayout

我有一个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
}

这就是我得到的:

enter image description here

在查看collectionView框架的边缘之前,单元格是否应该横向构建,然后转到新行? 知道为什么没有发生这种情况吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

您确定要调用大小的方法吗?我在代码中的任何地方都看不到layout.delegate = self。此外,您只需在初始化

中指定itemSize即可
var flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = CGSizeMake(40, 40)

另外,你真的想使用scrollDirection = Horizo​​ntal吗?如果是这样的话,那么你的收藏品视图高度应该等于物品高度,或者你需要有足够的物品来填充屏幕等等以便它滚动