在tableView中插入设置为Autoresize会导致滚动问题

时间:2016-06-15 18:02:16

标签: ios xcode swift uitableview

我问了好几天,我真的无法解释为什么会这样。

我正在进行聊天,使用 tableView 进行设置,将消息打印到单元格中。这些单元格设计有原型,有3种不同的类型(但无论如何它并不重要)。文字键入,邮件发送,单元格已插入,然后我们滚动到底部的tableView。

如您所知,在聊天视图中,消息的容器必须符合此文本(这是一个视图),然后单元格必须适合此容器(标签为橙色,容器在紫色)。

enter image description here

此容器具有可变高度并沿文本增长,从而更改单元格高度。

  • 我为自动布局显示设置了很多约束,但我的单元格高度不同于我在项目中为它设置的高度(不是适应性行为)。聊天消息被删除。

  • 因此,我尝试使用方法heightForRowAtIndexPath自行设置每个行高度,计算沿文本大小的约束,但它会产生真正的不良行为(例如在滚动时更改单元格)。计算/重新计算的大小通常是错误的。

  • 这就是为什么我最终使用设置为estimatedRowHeight的{​​{1}}与44结合使用的原因。这就是诀窍!哇!但它没有预期的好......

当表格视图出现时,一切都很好。容器适合他们的标签,行和#39;高度适合他们的容器,它很漂亮。插入期间出现问题。 经过多次测试后,我注意到只有在多线标签保留在表格视图中时才会出现这种不良行为。

在插入过程中,每个单元格在将其高度调整为内容之前似乎调整为44,然后与之前的状态相比创建一个间隙,从而创建表格视图的奇怪滚动:

enter image description here

如果我更改UITableViewAutomaticDimension,那就更糟了。

如果你愿意,我可以展示我的代码,但我不认为它在这里非常有用,因为我没有使用复杂的功能..只有插入,单元格的自动高度和向下滚动函数委托tableView。

你能帮帮我吗?真的我不知道如何改变它......每个聊天应用程序都能解决这个问题,但我无法找到方法。

感谢您的回答,请原谅我的英语水平,我是一名可怜的法国学生。

如果你需要一些代码评论,我会给它。

1 个答案:

答案 0 :(得分:1)

我认为你可以在cellForRowAtIndex方法中为每个单元格缓存高度值,在HeightForRowAtIndex中设置该单元格的相应高度。

你可以这样做:

statusRegister &= 0xFFFE; //clear the carry bit first
statusRegister |= (ushort)((carry) ? 0x1 : 0x0); //then set the carry bit