重新加载数据后,Tableview偏移已更改。
1使用自动布局的动态行高。
2在UIViewController中使用Navigationbar和tabbar。
3在tableivew中使用2标头(我的第一和第二标头是静态的,在第一节中是所有动态行。)
请检查日志
首次加载表格视图
previousContentHeight -> 291.0 -- previousContentOffset -> 0.0
afterReloadDataContentHeight -> 3788.5 -- afterReloadDataContentOffset -> 0.0
新数据从服务器到达并重新加载数据
previousContentHeight -> 3788.5 -- previousContentOffset -> 3063.5
afterReloadDataContentHeight -> 1719.0 -- afterReloadDataContentOffset -> 580.5
这是重新加载数据功能
func prepareReloadData() {
let previousContentHeight = tblView.contentSize.height
let previousContentOffset = tblView.contentOffset.y
print("previousContentHeight -> \(previousContentHeight) -- previousContentOffset -> \(previousContentOffset)")
tblView.reloadData()
tblView.layoutIfNeeded()
print("afterReloadDataContentHeight -> \(self.tblView.contentSize.height) -- afterReloadDataContentOffset -> \(self.tblView.contentOffset.y)")
}
答案 0 :(得分:0)
花费大量时间并找到解决该问题的方法
在这种情况下,@Igor 可以正常工作
您可以在这里check original answer @Igor
// declaration & initialization
var cellHeights: [IndexPath : CGFloat] = [:]
UITableViewDelegate
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cellHeights[indexPath] = cell.frame.size.height
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return cellHeights[indexPath] ?? UITableView.automaticDimension // Here you can set specific height like 70 or your cell height instead of automaticDimension, But My suggestion is set automaticDimension
}