我尝试按照此解决方案(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。
知道为什么这行不通吗?
答案 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)
}