带有 UICollectionViewDelegateFlowLayout 的 UIcollectioncell 在添加约束后不应用高度和宽度

UIcollectioncell with UICollectionViewDelegateFlowLayout does not apply height and width after adding constraint

我尝试使用 UICollectionView 将三个项目排成一行

extension DemoController : UICollectionViewDelegateFlowLayout {
    
    //1
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {
        //2
        let paddingSpace = sectionInsets.left  * (itemsPerRow + 1)
        let availableWidth = view.frame.width - paddingSpace
        let widthPerItem = availableWidth / itemsPerRow
        
        return CGSize(width: widthPerItem, height: widthPerItem)
    }
    
    //3
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        insetForSectionAt section: Int) -> UIEdgeInsets {
        return sectionInsets
    }
    
    // 4
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return sectionInsets.left
    }
}

如果单元格是空的,或者如果我在里面放一个视图并且只在顶部或左侧添加约束,就像 我得到像这样的输出

但是,如果我在右侧和底部添加约束,单元格的高度和宽度将不再起作用。

我哪里做错了?谢谢

UILabel 具有自动调整大小 属性,即,它采用其内容的大小。因此,如果您试图为所有四个方面提供约束,最好提供约束之间的关系 greaterThanOrEqualTo for leading and top and lessThanOrEqualTo for [=故事板上的约束 属性 中的 15=] 和 bottom。举个例子:

从我附上的图片可以看出,你必须把collection view的Estimated Size设置为None以便集合视图根据您定义的集合视图 FlowLayout 计算您的大小,否则它将根据您的 UILabel 的大小计算集合视图的大小。