我在 UICollectionView 中单元格的大小方面遇到了一些困难。
在android中,你可以轻松地“包裹”cell的大小。
就像在 iOS 中一样,您有一个函数调用“GetCell”,您可以决定它的大小。
iOS 中的区别在于,在(UICollectionViewController 的)“getCell”函数中,您似乎无法选择单元格(或内容视图)的大小。如果我更改大小,它会忽略它并使用 CollectionView 的常规“ItemSize”(对于所有单元格都相同)。
这有时会导致视图不太漂亮。例如,如果我有一个包含图像的水平列表,我希望图像之间的距离相同,如果一个图像为 200x200,另一个图像为 400x200,则独立。所以单元格的大小也应该不同。
可以为不同的单元定义不同的大小。您可以使用 Collectionview 委托和 GetSizeForItem(= ObjC 中的 sizeForItemAtIndexPath)函数。问题是,该函数是在实际的 GetCell 函数之前调用的。
因此,如果我有一个更复杂的单元格,例如带有一些标签。在我的“GetCell”函数中,我构建了这个单元格,最后,当返回单元格时,我知道它的大小should是。但是,在 GetSizeForItem 函数中,该信息尚不可用,因为 Cell 仍为“null”。
我能做到的唯一方法是在调用“GetSizeForItem”时实际为单元格构建 UIView(这样我就可以请求大小)。但这似乎不是一个好的设计,因为我在“GetCell”之前构建 UIView,我将在“GetCell”中再次构建它。
有什么我忽略的吗?
问候,
马特
事实上 GetSizeForItem 是与 GetCell 分开调用的。这样做是因为创建 UIView 是一项非常耗时和消耗内存的任务,并且您的应用程序要么会耗尽内存,要么必须处理其他视图才能处理大列表。
在呈现视图之前,UICollectionView(和 UITableView)会询问列表中所有(或大多数)元素的大小和位置,以便它知道在哪里绘制它们。不过,其中许多元素是不可见的,因此 collectionView 避免了创建它们。这就是为什么 GetSizeForItem 被提前调用,而 GetCell 只在稍后调用的原因。
在您的情况下,尝试将计算视图大小的逻辑与视图本身分开。使其成为一个简单的数学公式,不需要存在视图,因此它的速度足够快,可以预先运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)