UITableview重新整理時介面“亂跑”現象

weixin_33797791發表於2018-08-27

專案中出現重新整理tableview介面時,會發生介面跳到別的地方,而不是停留在當前操作的動態部分,這是因為iOS 11.0系統的特性導致的。

Self-Sizing在iOS11下是預設開啟的,Headers, footers, and cells都預設開啟Self-Sizing,所有estimated 高度預設值從iOS11之前的 0 改變為UITableViewAutomaticDimension

estimatedRowHeight這個屬性是給tableView每行設定預估行高,如果目前專案中沒有使用estimateRowHeight屬性。
在iOS11的環境下就要注意了,因為開啟Self-Sizing之後,tableView是使用estimateRowHeight屬性的,這樣就會造成contentSize和contentOffset值的變化,在估算行高機制下,contentSize的值是一點點地變化更新的,所有cell顯示完後才是最終的contentSize值。因為不會快取正確的行高,tableView reloadData的時候,會重新計算contentSize,就有可能會引起contentOffset的變化,就出現上述奇怪的現象。

解決方法:

在appdelegate.m檔案中,加上這幾句程式碼:

//可以通過以下方式禁用
if (@available(iOS 11.0, *)) {
      UITableView.appearance.estimatedRowHeight = 0;
      UITableView.appearance.estimatedSectionFooterHeight = 0;
      UITableView.appearance.estimatedSectionHeaderHeight = 0;
}

相關文章