我有一個TableView中的動態單元尺寸:Swift 3 | TableView中ScrollToTop上reloadData動態單元尺寸
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 20
我有一個內部的文本細胞,當然,文字高度可以改變其內容的功能。
有時我只有一條線,有時候我有更多的,這意味着我的細胞有時會有20個高度,有時更多。
我有一個問題,當我嘗試重新加載我的tableview數據並滾動到頂部。
這是我做的:
myTableViewDatas = newDatas
tableView.setContentOffset(CGPoint.zero, animated: false)
tableView.reloadData()
這是很難向你展示這種情況下,但它不會滾動到Y = 0
,它滾動到Y = 100
或類似的東西。因爲我的單元格大小根據要顯示的內容而變化。
如果我刪除動態大小,做:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 20
}
而且還在滾動到頂部:
myTableViewDatas = newDatas
tableView.setContentOffset(CGPoint.zero, animated: false)
tableView.reloadData()
==>這是工作,我滾動到Y = 0
我認爲我試過任何東西:
scrollToRow
scrollRectToVisible
scrollsToTop
我仍然有問題。 這是工作的唯一方法是,如果我耽誤reloadData
:
myTableViewDatas = newDatas
tableView.setContentOffset(CGPoint.zero, animated: false)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
tableView.reloadData()
}
這是工作,但它創造了一個「故障」 =>它顯示了科研數據,然後自動滾動到頂部,這是令人不安的用戶。
另一個解決方案是使用「reloadSections」:
myTableViewDatas = newDatas
tableView.setContentOffset(CGPoint.zero, animated: false)
tableView.reloadSections(IndexSet(integer: 0), with: .none) // I have only one section
它也能工作,但它也創造了「故障」,這就像TableView中與動畫(即使我設置.none重裝)其中顯示的單元格在新數據的功能下縮小/放大。
我真的找不到一個「正確的」解決方案來做到這一點,有沒有人已經遇到過這個問題? TY
如果你改變調用的順序?您可以滾動到頂部,然後重新加載數據。 – Holly
@霍利感謝您的回答,如果我改變了調用的順序=>沒有任何事情發生,滾動到頂端的唯一方法是如果我將contentOffset設置爲0,然後重新加載數據。 – Aximem
你從哪個線程執行代碼? – Holly