带有 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 的大小计算集合视图的大小。
我尝试使用 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 的大小计算集合视图的大小。