gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:53:39 25 4
gpt4 key购买 nike

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

我正在做一个聊天,设置了一个tableView,将消息打印到单元格中。这些电池是用原型(prototype)设计的,有 3 种不同的类型(但不管怎样)。 输入文本,发送消息,插入表格中的单元格,然后我们滚动到底部表格 View 。

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

enter image description here

这个容器有一个可变高度,并沿着文本增长,改变单元格高度。

  • 我为自动布局 显示设置了很多约束,但我的单元格高度与我最初在项目中为其设置的高度没有不同(无自适应行为)。聊天消息被剪掉了。

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

  • 这就是为什么我最终将 estimatedRowHeight 设置为 44 并结合 UITableViewAutomaticDimension 的原因。这就是诀窍!哇!但是并没有想象中的那么好..

当表格 View 出现时,一切都很好。容器适合他们的标签,行的高度适合他们的容器而且很漂亮。问题出现在插入过程中。经过多次测试,我注意到只有当 multilines label 保留在表格 View 中时才会出现这种不良行为。

在插入过程中,每个单元格的大小似乎在调整其高度以适应内容之前调整为 44,然后与之前的状态相比产生了一个间隙,这导致了表格 View 的奇怪滚动:

enter image description here

如果我更改 estimatedRowHeight 它会使情况变得更糟。

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

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

谢谢你的回答,请原谅我的英语水平,我是一个可怜的法国学生..

如果您需要一些代码注释,我会提供。

最佳答案

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

你可以这样做:

var cellCached = Dictionary<Int,AnyObject>()

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
table.rowHeight = yourCell.yourLabel.frame.origin.y + yourCell.yourLabel.frame.height + 10

cellCached[indexPath.row] = yourTable.rowHeight
}


func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

if(tableView == yourTable)
{
if(cellCached[indexPath.row] != nil)
{
return cellCached[indexPath.row] as! CGFloat
}
else
{
return 200
}
}
else
{
return UITableViewAutomaticDimension
}

}

关于ios - 在设置为 Autoresize 的 tableView 中插入会导致滚动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37842624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com