Ios UITableView ScrollToRow函数的动画设置很奇怪

Ios UITableView ScrollToRow函数的动画设置很奇怪,ios,swift,uitableview,scroll,Ios,Swift,Uitableview,Scroll,ScrollToRow没有按我所希望的那样工作。 我写的函数似乎工作得很好,但我希望它只有在添加时才能向下滚动到最后一行,就像在聊天中一样。当您收到新消息时,tableview会滚动到底部以阅读新消息 然而,我的tableview似乎每次在执行scrollToLastRow功能之前都会重新加载,我的意思是每次在滚动到底部之前。。。它首先返回到第一个单元格的顶部,并在每次创建新单元格时从那里开始滚动到底部 我的滚动代码很简单: func scrollToLastRow() { let in

ScrollToRow没有按我所希望的那样工作。 我写的函数似乎工作得很好,但我希望它只有在添加时才能向下滚动到最后一行,就像在聊天中一样。当您收到新消息时,tableview会滚动到底部以阅读新消息

然而,我的tableview似乎每次在执行scrollToLastRow功能之前都会重新加载,我的意思是每次在滚动到底部之前。。。它首先返回到第一个单元格的顶部,并在每次创建新单元格时从那里开始滚动到底部

我的滚动代码很简单:

func scrollToLastRow()
{
    let indexPath = IndexPath(row: messages.count - 1, section: 0)
    self.chat.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
要检查我的代码: 这是指向我的存储库的链接

用于聊天的ViewController为-->chatVC 用于聊天的ViewController是->聊天室

我试过任何我能找到的东西。 尝试在没有它的情况下发送滚动功能根本不起作用

在许多不同的地方使用了该功能,包括ViewDidDisplay 使用dispatch.asyncAfter进行延迟。。。。。 但什么都没用

使用tableView.insertRowsat:[IndexPath],并使用:UITableView.RowAnimation将对象添加到tableView的末尾

从您所说的问题和代码来看,动画问题是由于在将新项添加到数据源数组后重新加载整个tableView造成的,
您需要做的是使用Call tableView.insertRowsat:[indexath],在tableView和tableView上使用正确的IndexPath的:UITableView.RowAnimation\utableview:UITableView,cellForRowAt IndexPath:IndexPath将被调用。

@Fahad,在调用scroll-tolast函数之前,您正在重新加载tableView。请检查,并请在您的最后验证

注意:请在您的问题中正确更新您的GitHub存储库url,因为它不可单击

使用此功能可滚动到底部

   func scrollToBottom() {
        let bottomOffset = CGPoint(x: 0, y: contentSize.height - bounds.size.height + contentInset.bottom)
        setContentOffset(bottomOffset, animated: true)
    }

使用tableview.scrollToBottom

在调用scroll函数之前是否正在重新加载DataSomewhere?否。。它的内部数组不是单独插入行。。。。根据MSG的数组计数生成的行您正在数组的didSet中写入scrollToLast和reloadData。每次向数据源数组中添加新项时,都会调用该行,从而导致每次重新加载时出现动画问题。我已尝试在ViewDidAspect/viewDidLayoutSubview/viewDidLoad上调用它。。。还有cellForRowAt,正如你可以在很多地方看到它的注释,以显示我在哪里尝试过它。我检查了我的代码多次。。。我不明白。。我已经确保以两种方式运行代码,尝试在Scroll之前和之后重新加载数据,以显示相同的结果。加上你的scrollToBottom也有同样的问题,我必须把它放在If子句中,使它正常工作