UITableViewCell高度计算和委派?

时间:2012-12-28 13:40:16

标签: objective-c ios uitableview delegates

我知道这个问题之前曾被问过几百次,但它从未真正得到解决(或者至少我喜欢它的方式)。我有一个相当复杂的UITableViewCell设置。 cell.backgroundView是从UIView子类加载的,它使用了相当多的CoreGraphics和CoreText。该代码充斥着CTFramesetterSuggestFrameSizeWithConstraints,因此我很乐意在heightForRowAtIndexPath方法中复制该类。

我想我可以通过创建一个NSMutableDictionary来解决这个问题,其中indexPath作为键,高度作为值。但后来我面临着heightForRowAtIndexPath首先被调用的问题。我相信我可以通过猜测单元格的高度来解决这个问题,然后一旦单元格的UIView子类完成渲染,使用委托来设置单元格的高度。

但这让我遇到了问题,我该怎么委托这个呢?而且,如何防止滚动变得非常不稳定?因为细胞将在瞬间创建和调整大小。

1 个答案:

答案 0 :(得分:1)

过去,我使用过虚拟单元格。我有一个单独的方法-fillInCell:forRowAtIndexPath:,它将数据放入单元格。这样我可以填写-tableView:heightForRowAtIndexPath:中的虚拟单元格和-tableView:cellForRowAtIndexPath:中的真实单元格。

如果这对您不起作用,那么还有其他选择。

首先想到的是在-tableView:heightForRowAtIndexPath:而不是-tableView:cellForRowAtIndexPath:中创建真实单元格。您可以将完整的单元格存储在可变字典中。 -tableView:cellForRowAtIndexPath:只会从字典中提取已完成的单元格。您还应该检测滚动何时停止,这样您就可以清空字典(仅因为-tableView:heightForRowAtIndexPath:被调用并不意味着-tableView:cellForRowAtIndexPath:将调用相同的indexPath。)

希望有所帮助。