重新加载数据后,Tableview偏移量发生了变化

时间:2019-06-20 07:01:34

标签: ios swift uitableview

重新加载数据后,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)")
}

1 个答案:

答案 0 :(得分:0)

花费大量时间并找到解决该问题的方法

在这种情况下,

@Igor 可以正常工作

您可以在这里check original answer @Igor

Swift-5

// 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
}