目前,我已经尝试了
%t
然而它似乎不起作用,输出
func scrollToBottom(){
DispatchQueue.global(qos: .background).async {
let indexPath = IndexPath(item: self,messageArrat.count-1, section: 0)
self.messageTableView.scrollToRow(at: indexPath,at:.bottom,animated:true)
}
}
我在viewdidload中设置委托和数据源后立即调用该函数。
答案 0 :(得分:0)
首先:请将您的代码作为文字提供,而不是图像。
现在您的问题是,您正在尝试滚动到全局队列中的最后一行,但所有UI更新必须在主线程中发生,因此只需删除DispatchQueue,或者如果您不在主线程中,你可以写CategorySchema
而不是全局
E.g:
DispatchQueue.main
但我认为你根本不需要DispatchQueue,所以试着完全省略它。
答案 1 :(得分:0)
它喜欢在这个主线程上工作,而不是在后台工作,因为它与UI相关
试试这段代码:
func scrollToBottom() {
DispatchQueue.main.async {
let indexPath = IndexPath(item: self.messageArrat.count-1, section: 0)
self.messageTableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
}
答案 2 :(得分:0)
在" .async"中编写代码关闭你开始一个新线程,错误消息字面上告诉你不要这样做。
删除DispatchQueue
内容及其中的内容。
请发布文字,说明和所有内容以帮助社区。
答案 3 :(得分:0)
您无需添加DispatchQueue:
let indexPath = IndexPath(item: self.messageArrat.count-1, section: 0)
self.messageTableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
如果你想要DispatchQueue,那么就像这样添加主队列:
DispatchQueue.main.async {
let indexPath = IndexPath(item: self.messageArrat.count-1, section: 0)
self.messageTableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
答案 4 :(得分:0)
可能索引路径必须超出范围,请在滚动前尝试检查行数。也可以在主线程上执行所有操作。
答案 5 :(得分:0)
听起来像是一个计时问题,你说你是从viewDidLoad调用它,尝试将它移动到viewDidAppear或viewDidLayoutSubviews。当您操作UI并且需要在主线程上发生时,也从后台线程中删除。