UICollectionView在sizeForItemAtIndexPath中的reuseIdentifier - swift

时间:2015-12-02 10:37:02

标签: swift uicollectionview reuseidentifier

我有以下代码,它根据屏幕的大小将集合视图放入一列或两列:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let size = collectionView.frame.width
    if (size > 500) {
        return CGSize(width: (size/2) - 8, height: (size/2) - 8)
    }
    return CGSize(width: size, height: size)
}

我想修改它,因此高度取决于reuseIdentifier。我使用了两个 - 设置这样的东西:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let diceRoll = Int(arc4random_uniform(2) + 1)
    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("profileViewCell", forIndexPath: indexPath)
    if(diceRoll == 1) {
        cell = collectionView.dequeueReusableCellWithReuseIdentifier("profileChartViewCell", forIndexPath: indexPath)
    }
    return cell
}

如何获取当前单元格的reuseIndentifier,以便根据单元格的类型更改高度?

1 个答案:

答案 0 :(得分:0)

reuseIdentifierUICollectionViewReusableView的属性,是UICollectionViewCell的基类。因此,一旦有了单元格,您就可以随时拨打cell.reuseIdentifier

我不确定你的“当前细胞”的概念是什么。您可以在collectionView.cellForItemAtIndexPath()的索引路径中询问给定单元格的集合视图,并且可以通过实现委托方法collectionView:didSelectItemAtIndexPath:来跟踪当前选择的单元格,然后保存当前选定的indexPath。 / p>

或者(以及我推荐的)是你要么子类UICollectionViewCell并让子类化单元负责它自己的高度,要么实现一个自定义UICollectionViewLayout类并处理那里的大小。 / p>

如果您实现自己的单元格子类,请务必在自定义单元格上调用registerClass:forCellWithReuseIdentifier:,以便UICollectionView知道如何正确创建它。