UICollectionView自定义单元格

时间:2019-01-08 05:51:51

标签: swift uicollectionview

因此,我试图弄清楚如何自定义集合视图单元格的大小。所以我有一个ViewController,然后在ViewController中拖动了一个collectionView。我没有使用xib文件,而是在使用原型单元。现在,我似乎无法弄清楚如何自我调整单元格的大小。它不像表格视图那么简单。我已经尝试了以下发现的问题。

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {

        layout.estimatedItemSize = CGSize(width: view.frame.width, height: 100)
        layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
    }

然后我发现了另一个创建一个dummyCell的东西,看起来像这样。但这会使我的应用程序崩溃。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 50)
    let dummyCell = CommentCell(frame: frame)
    let comment = comments[indexPath.item]
    print(comment.text)

    dummyCell.comment = comment
    dummyCell.layoutIfNeeded()

    let targetSize = CGSize(width: view.frame.width, height: 1000)
    let estimateSize = dummyCell.systemLayoutSizeFitting(targetSize)
    let height = max(45 + 8 + 8, estimateSize.height)
    return CGSize(width: view.frame.width, height: height)

}

所以我需要集合视图控制器而不是视图控制器。我如何能够在不使用collectionViewController或nib文件的情况下自定义单元格大小?谢谢

1 个答案:

答案 0 :(得分:0)

假设单元格NIB /原型中有约束,则要将itemSize设置为.automaticSize

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    layout.estimatedItemSize = CGSize(width: view.frame.width, height: 100)
    layout.itemSize = UICollectionViewFlowLayout.automaticSize
}

您尚未共享设置的位置,但是如果在viewDidLoad中完成,则view.frame.width可能不是您想的那样。您将要仔细检查...