IOS的​​UITableViewCell中的drawRect编程方式创建VS layoutSubviews

问题描述:

我一直在试图建立复杂的UITableViewCell通过自动布局,但它给在滚动一个巨大的性能滞后,所以我决定去基于帧的即编程。IOS的​​UITableViewCell中的drawRect编程方式创建VS layoutSubviews

的单元布局的复杂性是像Facebook这样的卡,其中每一个细胞都不同w.r.t动态文本和图像。

我试图使细胞在layoutSubviews但滚动仍然不佳,但更好然后自动布局。

我也尝试渲染drawRect中的单元格,这给出了最好的性能,但滚动时我无法更新帧,因为它只被调用一次。

有人可以指导我什么是最好的情况下,我可以与最好的滚动性能。我被卡住了。

+0

fb卡?你能澄清吗? – faviomob

+0

意味着fb新闻饲料,其中图像高度变化,也可以是后备 – Mukesh

+0

也有可能是评论,喜欢计数器和其他东西..我转载instagram单元格与自动布局与可接受的perfomance(并不像原来的那么惊人,因此没有具体的样本很难说出你的解决方案可能有什么问题。我相信FB和Instagram不使用自动布局:) – faviomob

我也得出了同样的确切结论,即用故事板机智约束与一定的复杂性细胞打交道时变得太慢。我有10多种不同类型的细胞。在这种情况下,我不得不使用框架。

恐怕没有其他办法,而不是使用布局您的孩子享有帧你的细胞。使用heightForRowAtIndexPath和cellForRowAtIndexPath方法可以完全设置单元格的样式。

第一个被调用的方法是cellForRowAtIndexPath。在这种方法中,你完全设计你的细胞布置你的意见等等。一旦你完成了所有你可以确定你的细胞高度。然后,您可以从父视图的框架中获取单元格高度并使用它。

在heightForRowAtIndexPath你可以有一行返回单元格的高度,如果你在一个数组保存高度来代替。

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

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