Swift3 - UICollectionViewCel 的 intrinsicContentSize 是 (-1, -1)

Posted

技术标签:

【中文标题】Swift3 - UICollectionViewCel 的 intrinsicContentSize 是 (-1, -1)【英文标题】:Swift3 - UICollectionViewCel's intrinsicContentSize is (-1, -1) 【发布时间】:2017-02-15 08:51:33 【问题描述】:

当我尝试在函数collectionView(_:didSelectItemAt:) 中获取单元格的intrinsicContentSize 时,结果是(-1, -1)。

我正在使用流布局和单元格子视图的自动布局配置,但没有实现collectionView(_:layout:sizeForItemAt:)。有人有想法吗?

编辑:

单元格的自动布局具有固定的宽度和高度。我通过设置estimatedItemSize 开启了self-sizing 并将collectionView 配置如下:

self.collectionView.delegate = self
self.collectionView.dataSource = self
if let layout = self.collectionView.collectionViewLayout as? 
    UICollectionViewFlowLayout 
        layout.estimatedItemSize = CGSize(width: 100, height: 100)

我尝试将单元格的intrinsicContentSize 输入:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    let cell = collectionView.cellForItem(at: indexPath)
    let size = cell?.intrinsicContentSize

这给了我(-1, -1) size

【问题讨论】:

放更多你已经实现的代码 查看答案***.com/questions/24127032/… 【参考方案1】:

UICollectionViewCell 没有intrinsicContentSize。你为什么希望它有一个?

如果您想知道此时单元格的大小,只需询问其bounds.size

如果您想知道如果单元格通过其子视图的自动布局约束从内部调整大小时单元格的大小,请致电systemLayoutSizeFitting(_:)

【讨论】:

是的,在那之后我意识到了这一点。实际上我想实现一个可扩展和可折叠的单元格,其中包含点击时的标签,只是认为intrinsicContentSize 可以显示适合所有标签的大小并显示全部内容 听起来你想要的是systemLayoutSizeFitting(_:)。将其添加到我的答案中。 刚刚知道你是《ios 10 编程》这本书的作者,我正在研究它~很高兴见到你哈哈@matt 很好,但我似乎无法帮助您解决 this 问题:( 是的,您帮助我意识到intrinsicContentSize 是为UILabel 之类的视图设计的,并为我提供了有用的方法systemLayoutSizeFitting(_:)。我意识到我需要阅读更多关于 Apple 编程指南的内容。在之前我觉得他们有点冗长哈哈

以上是关于Swift3 - UICollectionViewCel 的 intrinsicContentSize 是 (-1, -1)的主要内容,如果未能解决你的问题,请参考以下文章

Xcode8+Swift3 纯代码模式实现 UICollectionView

UICollectionView滚动更改页面控制器索引swift3?

如何在滚动swift3时在UICollectionView中隐藏第0行的锁定图像

Swift 3 中的 UICollectionView + NSFetchedResultsController

Swift 3 - 带有填充的 UICollectionView 中心单元

麻烦出队 uicollectionview 单元格(swift 3)