Ios 在UICollectionView中计算sizeForItemAtIndexPath而不使用单元格

Ios 在UICollectionView中计算sizeForItemAtIndexPath而不使用单元格,ios,objective-c,autolayout,uicollectionview,Ios,Objective C,Autolayout,Uicollectionview,如果我有一个具有自动布局的单元格,我会在集合视图中从何处获取单元格的大小 我知道sizeForItemAtIndexPath应该从数据中获取大小,而不是从单元格本身,因为单元格还没有绘制,但在自动布局中,我不能仅通过查看数据来计算大小,除非我以一种我以后可以从中计算的方式对约束进行编码(似乎不正确) 另一方面,UIView确实有intrinsicContentSize和systemLayoutSizeFittingSize,它们给出了已经绘制或将要绘制的视图的大小 但是在SizeFormiteI

如果我有一个具有自动布局的单元格,我会在集合视图中从何处获取单元格的大小

我知道
sizeForItemAtIndexPath
应该从数据中获取大小,而不是从单元格本身,因为单元格还没有绘制,但在自动布局中,我不能仅通过查看数据来计算大小,除非我以一种我以后可以从中计算的方式对约束进行编码(似乎不正确)

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

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

细胞笔尖看起来像这样

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


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

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

这是UITableView iOS8之前版本确定单元高度的常用方法。同样的方法也适用于UICollectionView


请参见此处接受的答案:

您试图显示哪些数据?有很多方法可以获得数据在屏幕上所占的大小。对于文本,可以获取
NSAttributedString
的边界矩形。对于一个图像,你可以计算出你希望它在屏幕上的大小,等等。你还可以实例化一个代理视图,你可以重用它来调整大小(在我的测试中,你不能为此实例化一个单元格)。给我更多的细节,我会给你们一个更具体的答案。我加了一个尼巴的截图,好吗。如果您有自定义XIB,请参阅以下答案:。应该会给你想要的。当我为
UICollectionViewCell
尝试类似的方法时,它被证明是不可能的。请参见此处:
UICollectionViewCell
layout的问题可能是手动操作时未设置宽度。对于UITableViewCell,宽度是已知的。也许固定宽度会允许正确的高度大小?只是一个想法。但是,要使用什么宽度。实际上,除了在
cellForItemAtIndexPath:
中,集合视图单元格的出列存在问题。出于某种原因,这会崩溃。我同意这是出乎意料的,但这就是我们在我链接的答案中发现的。使用UITableView,可以使用对索引路径没有依赖关系的“出列”单元函数的非索引路径版本。可能是使用索引路径导致了崩溃。UICollectionView没有非索引路径版本。也许在内部,它有一个尚未请求的单元的排队问题。不过,通过故事板/nib加载您自己的单元原型应该实现与非索引路径出列相同的功能,这似乎就是您所做的。同样的问题是,我认为宽度最终决定了包装文本所需的高度等。但我认为大多数人都是根据设备本身的宽度来计算电池的宽度的,这是可行的。考虑到
UICollectionView
的包装方式,我一直都是这样处理宽度问题的。