UICollectionViewCell 不强制单元格大小

Posted

技术标签:

【中文标题】UICollectionViewCell 不强制单元格大小【英文标题】:UICollectionViewCell not forcing Cell Size 【发布时间】:2019-10-18 14:33:27 【问题描述】:

我正在使用

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    return CGSize(width: 400, height: 600)

指定我的CollectionView 的单元格大小。它工作正常,但只要我在单元格的ContentView 内向我的UILabel 添加宽度约束(UILabel.width == ContentView.width),单元格的宽度就会缩小到UILabel 的固有宽度。

我正在使用UICollectionViewDelegateFlowLayout 和水平滚动。

如何强制ContentView 坚持我指定的单元格大小并让子视图遵循自动布局约束?

【问题讨论】:

如果单元格宽度为 400,则减去 uilabel 两侧的填充并直接设置,而不是仅添加左右约束 我的单元格大小实际上是根据屏幕大小计算的,所以不能按照您的方式进行。 但是你写 return CGSize(width: 400, height: 600) 这意味着你所有的单元格大小应该是这样的。 是的,单元格应该是 400x600,但是当我在 UILabel 上添加大小限制时不是这样。 如果单元格大小是动态的,则有两个,首先您需要获取该标签的 intrinsicContentSize ,第二个是编写您的 flowLayout 并从此方法返回相应的大小 【参考方案1】:

问题是在情节提要中,您的集合视图的 Estimate Size 配置为自动:

如果您希望遵循 sizeForItemAt 实现而不是内部约束,则需要将其设置为 None。

【讨论】:

谢谢。这正是问题所在。 没问题,很乐意提供帮助。

以上是关于UICollectionViewCell 不强制单元格大小的主要内容,如果未能解决你的问题,请参考以下文章

带有 UIButton 单选按钮的 UICollectionViewCell - 一次选择一个单选按钮

DAO.Recordset MySQL 后端在字符串周围强制使用单引号

UICollectionViewCell 内的 UIScrollView 不滚动

UICollectionViewCell 不显示图像

强制 repr() 使用单引号

创建 UICollectionViewCell 时子视图框架不正确