Ios 在ContainerView内部的UICollectionView中计算单元格宽度

Ios 在ContainerView内部的UICollectionView中计算单元格宽度,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,我有一个UICollectionView,并且我实现了委托来计算单元格间距为0时单元格的宽度 它本身工作得很好,但是当我把它放在一个小于设备大小的容器视图中时,iOS错误地计算出了单元格之间的间距,增加了一个我不想要的水平空间 我已经验证了用于计算单元格大小的宽度是正确的,因此我不确定是什么导致了问题 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionV

我有一个UICollectionView,并且我实现了委托来计算单元格间距为0时单元格的宽度

它本身工作得很好,但是当我把它放在一个小于设备大小的容器视图中时,iOS错误地计算出了单元格之间的间距,增加了一个我不想要的水平空间

我已经验证了用于计算单元格大小的宽度是正确的,因此我不确定是什么导致了问题

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let widthPerItem = view.frame.width / itemsPerRow

    return CGSize(width: widthPerItem, height: 60)
}

您正在根据视图的大小计算单元格大小。由于collectionView没有占据整个屏幕的宽度,因此您得到的值不正确。相反,您应该根据collectionView本身的宽度进行计算

使用collectionView的边界而不是视图的框架:


好的,问题实际上与我的uicollectionviewcontroller没有正确调整其父容器视图的大小有关。更改为带有嵌入式uicollectionview plus约束的uiviewcontroller修复了问题。

谢谢,它并没有真正纠正问题,但它已将我引向了正确的方向。collectionview的宽度实际上与设备的宽度相同,这不是我想要的,因此这意味着我的collectionview太大,并且没有约束到我的containerview,我将再次查看我的约束并报告:在任何情况下,您都应该始终基于collectionview的宽度计算单元格宽度。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let widthPerItem = view.frame.width / itemsPerRow

    return CGSize(width: widthPerItem, height: 60)
}