有关标签和行高度dynamicresize的问题(iOS)

语境:

  • 构build一个应用程序,用于填充从asyc json转储中提取数据的表。
  • 单元格是一个自定义类(我定义)。 单元格中的主标签可能非常长。
  • 它被放置在原型单元格中的故事板上,但通过代码(非常标准的东西)进行定制。
  • 标签在cellForRowAtIndexPath中resize,通过heightForRowAtIndexPath调整行的大小 – 通过强制调用cellForRowAtIndex(如Massimo的答案) 来调整行的大小

所以,根据手头的问题 – 我注意到一些有趣的(坏的)事情发生了。

第一个问题:表加载时,行和标签是正确dynamicresize! 大! 但是,当向下滚动然后向上滚动时,标签高度将不正确 – 例如,第一行在加载时是正确的。 然后,当我向下滚动,然后向上滚动再次看到它时,它将被截断。 具体来说,行的大小会很好,但标签的高度会改变,只能截成两行。 想知道如果这是因为我做了故事板和编码来定制单元格。 有人看到这个?

第二个问题:当我向下滚动,而行的大小正确(大),标签是短(截断)。想知道是否是上述“潜在答案”的一些相反。

  • “潜在的答案”是行被全部计算并存储在“前面”,以便向下滚动/然后备份不影响它。 然而,当细胞“离开视野”,并出院,然后当他们重新查看(向下滚动,然后备份)它将依靠故事板。(不恰当?)

所有这三个问题都是在heightForRowAtIndexPath中返回错误高度的症状。 在我的数据模型类中,我有一个calculateHeight方法,我在heightForRowAtIndexPath中调用。 该模型还caching了答案,因此在第一次调用之后不需要重新计算它。 单元类使用模型的计算高度来布局其子视图。

“答案”是从故事板中删除原型单元格,并将其完全编码,问题就消失了。 基本工作仍然没有被理解(例如,当单元格放在队列中然后再被查看时,故事板与代码之间的交互)