1

语境:

  • 构建一个应用程序,该应用程序填充一个从 asyc json 转储中获取数据的表。
  • 单元格属于自定义类(我定义)。单元格中的主标签可以很长。
  • 它被“放置”在原型单元中的情节提要中,但通过代码(非常标准的东西)进行定制。
  • 标签在 cellForRowAtIndexPath 中调整大小,行通过 heightForRowAtIndexPath 调整大小 - 通过强制调用 cellForRowAtIndex 来调整行大小,就像 Massimo 在此处的回答

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

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

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

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

2 回答 2

0

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

于 2012-12-04T22:57:41.750 回答
0

通过从情节提要中删除原型单元并将它们完全用代码来“回答”,问题就消失了。基本的工作原理仍未被理解(即当单元被放入队列然后再次查看时故事板与代码之间的交互)

于 2012-12-07T19:41:51.377 回答