在不使用单元格的情况下计算 UICollectionView 中的 sizeForItemAtIndexPath

Posted

技术标签:

【中文标题】在不使用单元格的情况下计算 UICollectionView 中的 sizeForItemAtIndexPath【英文标题】:Calculating sizeForItemAtIndexPath in UICollectionView without using the cells 【发布时间】:2015-02-11 13:44:09 【问题描述】:

如果我有一个带有自动布局的单元格,我自己在一个循环中,从哪里获取集合视图中单元格的大小

我知道sizeForItemAtIndexPath 应该从数据中获取大小,而不是从单元格本身,因为尚未绘制单元格,但在自动布局中,我无法仅通过查看数据来计算,除非我以我以后可以从中计算的方式将约束放入代码中(似乎是歪的)

另一方面,UIView 确实有intrinsicContentSizesystemLayoutSizeFittingSize,它们给出了已经绘制或将要绘制的视图的大小。

但在 sizeForItemAtIndexPath 中我还没有视图,数据只是数据。

单元格笔尖看起来像这样

我应该以什么方式获取自定义单元格的大小(来自 .nib)?

我可以在技术上硬编码图像和图标的大小,但感觉不对。在一个应该告诉控制器它是什么大小的函数中询问视图它的大小也是错误的

【问题讨论】:

你想显示什么数据?有很多方法可以获取数据在屏幕上占据的大小。对于文本,您可以获得NSAttributedString 的边界矩形。对于图像,您可以确定希望它在屏幕上的大小等。您还可以实例化一个代理视图,您可以将其重复用于调整大小(在我的测试中,您不能为此目的实例化一个单元格)。给我一些详细信息,我会尽力为您提供更具体的答案。 我添加了笔尖截图 啊,好的。如果您有自定义 XIB,请参阅此答案:***.com/a/28161915/394484。应该给你你想要的。 【参考方案1】:

您可以使用您配置的屏幕外原型单元格,然后使用它来确定其大小。

这是 ios8 之前的 UITableView 确定单元格高度的常用方法。同样的方法应该适用于 UICollectionView。

在此处查看接受的答案:Using Auto Layout in UITableView for dynamic cell layouts & variable row heights

【讨论】:

当我为UICollectionViewCell 尝试了类似的方法时,事实证明这是不可能的。见这里:***.com/a/28161915/394484 UICollectionViewCell 布局的问题可能是手动执行时未设置宽度。使用 UITableViewCell 的宽度是已知的。也许固定宽度会允许正确的高度大小?只是一个想法。但是要使用什么宽度。 实际上,除了cellForItemAtIndexPath: 之外,集合视图单元的出列存在问题。由于某种原因,这会崩溃。我同意这是出乎意料的,但这就是我们在我链接的答案中发现的。 好的。使用 UITableView,您可以使用不依赖于索引路径的出队单元函数的非索引路径版本。使用索引路径可能是导致崩溃的原因。耻辱 UICollectionView 没有非索引路径版本。也许在内部,它有一个尚未要求的单元的出列问题。尽管通过故事板/笔尖加载您自己的单元原型应该实现与非索引路径出队相同的效果,这似乎是您所做的。另一个问题是我认为的宽度最终决定了包装文本等所需的高度...... 当然。但我认为大多数人都是根据设备本身确定单元格的宽度,这将起作用。考虑到 UICollectionView 的包装方式,这就是我一直处理宽度问题的方式。

以上是关于在不使用单元格的情况下计算 UICollectionView 中的 sizeForItemAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

在不配置的情况下增加单元格的高度?

在不使用索引的情况下替换 pandas DataFrame 中选定单元格的值

如何在不引用其他单元格的情况下将报表从 Reporting Services 2005 导出到 Excel?

如何在不使用按钮或 tbody 的情况下从动态生成的表中单击一行来获取 HTML 表中单元格的值

是否可以在不刷新其他单元格的情况下刷新 ui 表视图的一部分?

如何在不丢失表格视图单元格的情况下将现有集合视图添加到表格视图