Swift 2.0:具有不同单元格宽度的集合视图

时间:2016-05-23 10:42:51

标签: ios swift2 collectionview

我在ViewController上有一个简单的集合视图。它是一个单独的水平滚动条。有无限数量的单元格可以是A类或B类。每类单元格的宽度都不同(A = 160,B = 40)。

因此集合数组可能是AABBABAABA,集合视图单元格宽度应根据单元格类型而改变。

我试图在属性中设置单元格宽度。我已经尝试通过标签,isKindOfClass,tintColors,viewDidLoad等来确定要使用的宽度。似乎没有什么可行的,所以我认为它比最初的想法更复杂。

我已经实现了以下内容,但它始终选择160宽度,因为标签始终为零。我想我错过了布局或什么?

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    if collectionView.cellForItemAtIndexPath(indexPath)?.tag == 111 {
        return CGSize(width: 40, height: 80)
    } else {
        return CGSize(width: 160, height: 80)
    }
}

标记在didSelectItemAtIndexPath函数中被识别,但似乎不在大小调整函数中。

任何想法?

由于

2 个答案:

答案 0 :(得分:0)

我认为这样做的一种方法是使用一个数组属性来存储宽单元格的索引路径。在委托功能中,您只需执行此操作:

    return wideCellsIndexPaths.contains(indexPath) ? 
CGSize(width: 160, height: 80) : CGSize(width: 40, height: 80)

答案 1 :(得分:0)

如果你只有2个单元格,只需在indexpath.row的基础上创建条件 避免标签。 希望它能为你效劳。

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    if indexPath.row == 0 {
        return CGSizeMake(40,80)
    } else {
        return CGSizeMake(160,80)
    }
}