ios - 具有可变单元格大小的 UICollectionView

标签 ios xamarin.ios ios6 uicollectionview uicollectionviewcell

我在 UICollectionView 中的单元格大小上遇到了一些困难。 在 android 中,您可以轻松地“包装”单元格的大小。 就像在 iOS 中一样,您有一个函数调用“GetCell”,您可以决定它的大小。

iOS 中的不同之处在于,在(UICollectionViewController 的)“getCell”函数中,您似乎无法选择单元格(或内容 View )的大小。如果我更改大小,它会忽略它并使用 CollectionView 的常规“ItemSize”(所有单元格都相同)。

这有时会导致 View 不是很漂亮。例如,如果我有一个包含图像的水平列表,我希望图像之间的距离相同,如果一个图像为 200x200 而另一个图像为 400x200,则独立。所以单元格大小也应该不同。

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

因此,如果我有一个更复杂的单元格,例如带有一些标签。在我的“GetCell”函数中,我构建了这个单元格,最后,当返回单元格时,我知道它应该的大小。但是,在 GetSizeForItem 函数中,该信息尚不可用,因为 Cell 仍为“null”。

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

我是否忽略了什么?

问候, 马特

最佳答案

实际上,GetSizeForItem 与 GetCell 是分开调用的。这样做是因为创建 UIView 是一项非常耗时和耗内存的任务,您的应用程序要么会耗尽内存,要么必须处理其他 View 才能处理大列表。

在呈现 View 之前,UICollectionView(和 UITableView)会询问列表中所有(或大部分)元素的大小和位置,以便它知道将它们绘制到哪里。虽然其中许多元素是不可见的,因此 collectionView 避免了必须创建它们。这就是为什么会先调用 GetSizeForItem,然后才调用 GetCell。

在您的情况下,请尝试将计算 View 大小的逻辑与 View 本身分开。使其成为一个不需要 View 存在的简单数学公式,因此它足够快,可以预先运行。

关于ios - 具有可变单元格大小的 UICollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531975/

相关文章:

ios - 更新到 Xamarin touch 8.2 并使用 mvvmcross

c# - ViewDidAppear 导致我的标签消失(Xamarin.ios,C#)

ios - 在方法运行之前使用可达性检查连接

ios - Swift 3 - 异步显示警报 Controller ,长函数在后台运行

ios - 如何更改 NavigationBar 上 BarButtonItem 的文本?

iOS NSXMLParser - 一致地从 XML 标签派生图像源 URL

iphone - 使用 iOS 6 SDK 和 Xcode 4.5 构建 armv6 架构(目标 iOS 3.1.3)?

iOS6 CLPlacemark 显示街道名称

javascript - Nativescript Google map - 更改折线颜色

objective-c - 苹果手机 : responder chain in UIScrollView