ios UITableViewCell以编程方式在drawRect vs layoutSubviews中创建

时间:2016-04-04 07:55:07

标签: ios swift uitableview drawrect layoutsubviews

我一直试图通过Autolayout创建复杂的UITableViewCell,但是在滚动时它会产生巨大的性能延迟,所以我决定以编程方式进行基于帧的。

单元格布局的复杂性就像Facebook卡片,其中每个单元格都与动态文本和图像不同。

我尝试在layoutSubviews中渲染单元格,但滚动仍然很差,但比Autolayout更好。

我还尝试在drawRect中渲染单元格,这样可以获得最佳性能但滚动时我无法更新帧,因为它只被调用一次。

有人可以指导我最好的情况,我可以选择最佳的滚动性能。我被卡住了。

1 个答案:

答案 0 :(得分:0)

我也得出了相同的结论:在处理某种复杂性的单元格时,使用故事板机智约束会变得太慢。我有10多种不同类型的细胞。在这种情况下,我不得不使用框架。

我担心除了使用子视图的框架布置细胞之外别无他法。使用heightForRowAtIndexPath和cellForRowAtIndexPath方法,您可以完全设置单元格的样式。

调用的第一个方法是cellForRowAtIndexPath。在这种方法中,您可以完全设置细胞的样式,从而设置视图等。完成所有操作后,您还可以确定细胞高度。然后,您可以从父视图的框架中获取单元格高度并使用它。

在heightForRowAtIndexPath中,如果您将高度保存在数组中,则可以使用一行返回单元格的高度。

我忽略了layoutsubviews方法,因为我不得不重构一堆现有的代码。然而,我只在cellForRowAtIndexPath而不是layoutsubviews方法中放置了单元格。在这个方法中,我可以使用子视图的高度来计算父高度。在layoutsubviews中,视图将在稍后布局,这可能会导致问题。

无论如何希望这些信息对某人有用。