UICollectionView具有可变的孔尺寸(UICollectionView with var

2019-08-03 03:22发布

我挣扎有点用大小为UICollectionView细胞。 在Android中,你可以很容易地“包装”的单元格的大小。 就像在iOS上,你有一个函数调用“GetCell”,你决定这将是多么大。

在iOS版不同的是,在(的UICollectionViewController)的“getCell”功能,似乎你不能选择单元格的大小(或内容查看)。 如果我改变大小,它会忽略它,反正使用的CollectionView的一般“ItemSize”(这是相同的所有细胞)。

这有时会导致某些观点是不是很漂亮。 例如,如果我有图像的水平列表,我想图像之间的距离是相同的,如果独立的一个图像是200×200,而另一个400x200。 因此,电池的大小应该也不同。

它可以定义一个不同的大小对于不同的小区。 您可以使用的CollectionView代表和GetSizeForItem(= sizeForItemAtIndexPath在ObjC)功能。 问题是,这个函数被调用之前实际GetCell功能。

所以,如果我有一个更复杂的细胞,具有例如一些标签。 在我的“GetCell”功能,我建立这个细胞,并在年底,返回单元格时,我知道这应该是它的大小。 然而,在GetSizeForItem功能,即信息还不可用,因为细胞仍是“空”。

我能做到这一点的唯一方法,就是真正打造为电池(这样我就可以请求的大小)在“GetSizeForItem”电话的那一刻了UIView。 但是,这似乎并没有一个好的设计,因为我正在创建的“GetCell”在那里我将再次建立它之前的UIView。

有我俯瞰的东西吗?

问候,马特

Answer 1:

事实上GetSizeForItem会从GetCell单独调用。 它这样做的方式,因为创建UIViews是一个非常耗时间和金钱的任务,您的应用程序要么耗尽内存或有处置其他视图能够处理大名单。

认为被提出之前,UICollectionView(和UITableView的)请求的大小和列表中的所有(或大部分)元素的位置,所以它可以知道在哪里画他们。 其中许多元素是不可见的,所以对的CollectionView避免了创建它们。 这就是为什么GetSizeForItem被调用的前期和GetCell只是后来。

在你的情况下,尝试在计算从视图本身的视图大小的逻辑分离。 使它成为一个简单的数学公式,不需要为了生存,所以它的速度不够快,运行前期。



文章来源: UICollectionView with variable cell sizes