自适应大小的UICollectionView单元格

3

我正在尝试自适应大小的集合视图单元格。我有一个视图控制器并在其中拖动了一个集合视图。我没有使用xib文件,而是使用原型单元格。现在我无法弄清如何自适应大小。这不像表格视图那么容易。我尝试了以下方法:

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {

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

然后我找到了另一个创建虚拟单元格的方法,它看起来像这样。不过这会导致我的应用程序崩溃。

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)

}

那么我需要使用集合视图控制器而不是视图控制器。如果不使用集合视图控制器或nib文件,我如何能够自适应大小的单元格呢?谢谢。


可能会有所帮助,请查看此链接:https://dev59.com/v18e5IYBdhLWcg3wS425 - Caleb
这会导致我的应用程序崩溃。如果你想使用后一种技术,但它仍然崩溃,你需要告诉我们在哪一行崩溃,控制台上显示了什么等等。没有这些信息,我们很难进行诊断。 - Rob
看一下这篇文章 https://medium.com/dev-genius/take-your-ios-architecture-to-the-next-level-with-cellconfigurator-7a645940ff68 - Feridun Erbaş
1个回答

0
假设您在单元格 NIB/prototype 中有约束条件,您希望将 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可能不是您想要的值。您需要仔细检查一下...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接