【发布时间】:2020-02-03 14:21:18
【问题描述】:
假设您有一个带有普通自定义 UICollectionViewLayout 的 UICollectionView。
所以是 >>> 不是
自定义布局是微不足道的,在prepare 调用中,您只需遍历数据并布局每个矩形。所以说它是一个垂直滚动的集合......
override func prepare() {
cache = []
var y: CGFloat = 0
let k = collectionView?.numberOfItems(inSection: 0) ?? 0
// or indeed, just get that direct from your data
for i in 0 ..< k {
// say you have three cell types ...
let h = ... depending on the cell type, say 100, 200 or 300
let f = CGRect(
origin: CGPoint(x: 0, y: y ),
size: CGSize(width: screen width, height: h)
)
y += thatHeight
y += your gap between cells
cache.append( .. that one)
}
}
在示例中,对于上述三种单元格类型中的每一个,单元格高度都是固定的 - 都没有问题。
处理动态单元格高度如果您使用的是流式布局,这是一个很好的探索并且确实相对简单。 (Example,也可以在www上看到很多解释。)
但是,如果您想要具有(NON-flow)完全正常的日常 UICollectionViewLayout 的动态单元格高度怎么办?
estimatedItemSize 在哪里?
据我所知,UICollectionViewLayout 中没有estimatedItemSize 的概念?
那你到底是做什么的?
您可以天真地只是 - 在上面的代码中 - 以一种或另一种方式简单地计算每个单元格的最终高度(例如计算任何文本块的高度等)。但这似乎非常低效:在计算整个 100 个单元格大小之前,根本无法绘制任何集合视图。您根本不会使用任何 iOS 的动态高度功能,也不会是即时的。
我想,您可以从头开始对整个即时系统进行编程。 (所以,像 .. 使表格大小实际上只有 1,手动计算该高度,将其发送到集合视图;计算项目 2 的高度,将其发送,等等。)但这很蹩脚。
有没有办法使用自定义 UICollectionViewLayout 实现动态高度单元格 - 而不是流布局?
(当然,当然你也可以手动完成,所以在上面的代码中一次计算所有 1000 个高度,你就完成了,但这会很蹩脚。)
就像我在上面所说的第一个难题是,(正常的、非流动的)UICollectionViewLayout 中的“估计大小”概念到底在哪里?
【问题讨论】:
标签: uicollectionview ios12 swift5