0

我知道这个问题之前已经被问过数百次,但从未真正得到解决(或者至少是我希望的方式)。我有一个相当复杂的 UITableViewCell 设置。从 UIView 子类加载,该cell.backgroundView子类使用了相当多的 CoreGraphics 和 CoreText。代码中到处都是CTFramesetterSuggestFrameSizeWithConstraints,所以我不愿意在heightForRowAtIndexPath方法中复制类。

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

但这给我留下了一个问题,我到底该怎么委派这个?而且,如何防止滚动非常不稳定?因为单元格将在瞬间创建和调整大小。

4

1 回答 1

1

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

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

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

希望有帮助。

于 2012-12-28T14:48:41.077 回答