提问者:小点点

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


我试图用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
    }
}

我哪里做错了? 谢谢


共2个答案

匿名用户

高度约束和底部约束,宽度约束和前导约束如果同时使用,将会发生冲突。 不要使用不必要的限制。 如果您给出了宽度,则不需要前导约束;如果您给出了高度,则不需要底部约束

在某些场景中,如果您需要同时使用它们,请对优先级或相等性进行一些更改

匿名用户

uilabel具有自动调整大小属性,即它接受其内容的大小。 因此,如果您试图为所有四个方面提供约束,最好在情节提要的constraint属性中为前导top以及尾随botto提供greaterthanorequalto的约束之间的关系。 下面是一个例子: