collectionViewLayout.collectionViewContentSize得到SIGABRT

时间:2018-06-22 03:08:27

标签: swift uicollectionview uicollectionviewlayout

我尝试按照此解决方案(How to determine height of UICollectionView with FlowLayout)确定UICollectionViewLayout的大小,以便相应地调整单元格的大小。我下面的代码调用collectionViewContentSize,它在被调用时引发错误:

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


    let frameWidth  = collectionViewLayout.collectionViewContentSize.width
    let maxCellWidth = (frameWidth) / (7.0/6.0 + 6.0)
    let frameHeight  = collectionViewLayout.collectionViewContentSize.height
    let maxCellHeight = frameHeight

    let cellEdge = maxCellWidth < maxCellHeight ? maxCellWidth : maxCellHeight

    return CGSize(width: cellEdge, height: cellEdge)
}

错误是线程1 SIGABRT。

知道为什么这行不通吗?

1 个答案:

答案 0 :(得分:1)

您可能正在获得无限递归,因为为了知道集合视图的内容大小,它需要知道每个项目的大小。集合视图调用sizeForItemAt的全部原因是为了确定集合视图的内容大小。

好消息是,您没有理由要求收集视图的内容大小。而是将项目的大小基于集合视图本身的大小,而不是内容大小。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let frameWidth  = collectionView.frame.width
    let maxCellWidth = (frameWidth) / (7.0/6.0 + 6.0)
    let frameHeight  = collectionView.frame.height
    let maxCellHeight = frameHeight

    let cellEdge = maxCellWidth < maxCellHeight ? maxCellWidth : maxCellHeight

    return CGSize(width: cellEdge, height: cellEdge)
}