首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可变单元尺寸的UICollectionView

可变单元尺寸的UICollectionView
EN

Stack Overflow用户
提问于 2012-11-23 15:30:07
回答 1查看 6.6K关注 0票数 5

我正在为UICollectionView中的单元格的大小而挣扎。在android系统中,您可以轻松地“包装”单元格的大小。就像在iOS中一样,你有一个函数调用'GetCell‘,你决定它有多大。

iOS的不同之处在于,在"getCell“函数( UICollectionViewController)中,您似乎无法选择单元格(或内容视图)的大小。如果我更改大小,它将忽略它,并且无论如何使用CollectionView的一般‘CollectionView’(所有单元格都是相同的)。

这有时会导致景色不太美。例如,如果我有一个包含图像的水平列表,我希望图像之间的距离是相同的,如果一个图像为200x200,而另一个图像为400x200,则独立。所以细胞大小也应该不同。

可以为不同的单元定义不同的大小。您可以使用集合视图委托和GetSizeForItem (= sizeForItemAtIndexPath in ObjC)函数。问题是,这个函数在实际的GetCell函数之前调用。

所以如果我有一个更复杂的细胞,比如一些标签。在我的"GetCell“函数中,我构建了这个单元格,最后,当返回单元格时,我知道它的大小应该是。但是,在GetSizeForItem函数中,该信息还不可用,因为单元格仍然是'null‘。

唯一能做到这一点的方法是在调用“UIView”时为单元格实际构建GetSizeForItem(这样我就可以请求大小)。但是这似乎不是一个好的设计,因为我在“UIView”之前构建GetCell,然后再构建它。

有什么东西我忽略了吗?

你好,马特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-25 21:44:39

实际上,GetSizeForItem是独立于GetCell调用的。这样做是因为创建UIViews是一项耗费时间和内存的任务,您的应用程序要么耗尽内存,要么必须配置其他视图才能处理大列表。

在视图显示之前,UICollectionView (和UITableView)要求列表中所有(或大多数)元素的大小和位置,这样它就可以知道在哪里绘制它们。但是,这些元素中有许多是不可见的,因此collectionView避免了创建它们。这就是为什么GetSizeForItem会被提前调用,而GetCell只是在稍后才被调用。

在这种情况下,尝试将计算视图大小的逻辑与视图本身分开。让它成为一个简单的数学公式,不需要一个视图就存在,所以它足够快,可以预先运行。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13531975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档