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

Posted

技术标签:

【中文标题】ios UITableViewCell 以编程方式在drawRect vs layoutSubviews中创建【英文标题】:ios UITableViewCell programmatically create in drawRect vs layoutSubviews 【发布时间】:2016-04-04 07:55:06 【问题描述】:

我一直在尝试通过自动布局创建复杂的UITableViewCell,但它在滚动时会产生巨大的性能延迟,所以我决定采用基于帧的方式,即以编程方式。

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

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

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

有人可以指导我什么是最好的滚动性能最好的情况。?我被困住了。

【问题讨论】:

脸书卡?你不能澄清一下吗? 表示图片高度不同的fb新闻提要以及帖子 也可能有 cmets,喜欢计数器和其他东西。我复制了带有自动布局的 instagram 单元格,具有可接受的性能(虽然不像原来的那么令人惊叹),因此如果没有具体的样本,很难分辨你的解决方案可能有什么问题。我相信 fb 和 instagram 不使用自动布局 :) 是的,我知道他们不使用自动布局,我在许多论坛上看到他们使用drawRect 性能方法,因为即使我可以看到性能相当不错,但我无法破解 tat 的东西。 使用 drawRect 来绘制你的视图。没有别的了。 【参考方案1】:

我也得出了相同的确切结论,即在处理具有一定复杂性的单元格时,使用带有约束的情节提要变得太慢了。我有 10 多种不同类型的细胞。在这种情况下,我不得不使用框架。

恐怕除了使用子视图的框架来布局单元格之外别无他法。使用 heightForRowAtIndexPath 和 cellForRowAtIndexPath 方法,您可以完全设置单元格的样式。

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

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

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

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

【讨论】:

以上是关于ios UITableViewCell 以编程方式在drawRect vs layoutSubviews中创建的主要内容,如果未能解决你的问题,请参考以下文章

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

如何以编程方式在 UITableViewCell 中添加自定义视图?

UITableViewCell - 我可以以编程方式显示“删除”按钮吗?

如何在标准 UITableViewCell 中以编程方式自动布局右侧的自定义 UIButton。

我在自定义 UITableViewCell 中以编程方式设置布局约束时遇到问题

当我尝试以编程方式添加 UIView 时,UITableViewCell 高度不会自动调整(而是压扁我的 UIView)