我知道这个问题之前曾被问过几百次,但它从未真正得到解决(或者至少我喜欢它的方式)。我有一个相当复杂的UITableViewCell设置。 cell.backgroundView
是从UIView子类加载的,它使用了相当多的CoreGraphics和CoreText。该代码充斥着CTFramesetterSuggestFrameSizeWithConstraints
,因此我很乐意在heightForRowAtIndexPath
方法中复制该类。
我想我可以通过创建一个NSMutableDictionary来解决这个问题,其中indexPath作为键,高度作为值。但后来我面临着heightForRowAtIndexPath
首先被调用的问题。我相信我可以通过猜测单元格的高度来解决这个问题,然后一旦单元格的UIView子类完成渲染,使用委托来设置单元格的高度。
但这让我遇到了问题,我该怎么委托这个呢?而且,如何防止滚动变得非常不稳定?因为细胞将在瞬间创建和调整大小。
答案 0 :(得分:1)
过去,我使用过虚拟单元格。我有一个单独的方法-fillInCell:forRowAtIndexPath:
,它将数据放入单元格。这样我可以填写-tableView:heightForRowAtIndexPath:
中的虚拟单元格和-tableView:cellForRowAtIndexPath:
中的真实单元格。
如果这对您不起作用,那么还有其他选择。
首先想到的是在-tableView:heightForRowAtIndexPath:
而不是-tableView:cellForRowAtIndexPath:
中创建真实单元格。您可以将完整的单元格存储在可变字典中。 -tableView:cellForRowAtIndexPath:
只会从字典中提取已完成的单元格。您还应该检测滚动何时停止,这样您就可以清空字典(仅因为-tableView:heightForRowAtIndexPath:
被调用并不意味着-tableView:cellForRowAtIndexPath:
将调用相同的indexPath。)
希望有所帮助。