Har*_*cha 11 uitableview reloaddata ios swift
我想滚动到给定的索引(self.boldRowPath),但是当我scrollToRow之前执行调试时reloadData().
怎么知道reloadData已经完成了?
func getAllTimeEvent() {
self.arrAllTimeEvent = ModelManager.getInstance().getAllTimeEvent(from: self.apportmentDateFrom, to: self.apportmentDateTo)
self.tblTimeEvent.reloadData()
self.tblTimeEvent.scrollToRow(at: self.boldRowPath ?? [0,0], at: .top, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都感激不尽.
Far*_*dad 22
尝试这样做,它应该工作:
self.tblTimeEvent.reloadData()
DispatchQueue.main.async(execute: {
self.tblTimeEvent.scrollToRow(at: self.boldRowPath ?? [0,0], at: .top, animated: true)
})
Run Code Online (Sandbox Code Playgroud)
这将在主线程上执行scrollToRow,这意味着在reloadData完成后(因为它在主线程上)
正如在这个答案中所解释的那样,重新加载UITableView会在下一个布局运行时发生(通常,当您将控制返回到运行循环时).
因此,您可以使用主调度队列在下一个布局之后安排代码.在你的情况下:
func getAllTimeEvent() {
self.arrAllTimeEvent = ModelManager.getInstance().getAllTimeEvent(from: self.apportmentDateFrom, to: self.apportmentDateTo)
self.tblTimeEvent.reloadData()
DispatchQueue.main.async {
self.tblTimeEvent.scrollToRow(at: self.boldRowPath ?? [0,0], at: .top, animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以通过手动调用强制布局layoutIfNeeded.但这通常不是一个好主意(前一个选项是最好的):
func getAllTimeEvent() {
self.arrAllTimeEvent = ModelManager.getInstance().getAllTimeEvent(from: self.apportmentDateFrom, to: self.apportmentDateTo)
self.tblTimeEvent.reloadData()
self.tblTimeEvent.layoutIfNeeded()
self.tblTimeEvent.scrollToRow(at: self.boldRowPath ?? [0,0], at: .top, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9374 次 |
| 最近记录: |