有关动态调整标签和行高的大小(iOS)的问题

时间:2012-12-04 22:44:36

标签: ios cocoa-touch uitableview dynamic resize

背景:

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

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

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

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

  • “潜在答案”是所有行都是“预先”计算和存储的,因此向下滚动/然后向上滚动不会影响它。但是,当单元格“不在视野中”并且已经出列时,当它们重新查看时(向下滚动/然后向上),它将依赖于故事板。(不恰当?)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

“ANSWERED”通过从故事板中删除原型单元并完全使用代码,问题就消失了。基本工作仍然没有被理解(即,当单元格排队然后再次查看时,故事板与代码之间的相互作用)