iOS 11中 tableView.contentOffset的值在reloadData后變了

今天遇到了個比較奇葩的問題
一個tableView, 在數(shù)據(jù)源添加一條數(shù)據(jù)后reloadData,tableView的contentOffset值變了,
這就導致顯示的cell的位置的錯亂或者偏移;
比如數(shù)據(jù)是【1,2,3,4,5,6,7,8】,當前顯示的是【6,7,8】
這時候在數(shù)據(jù)源最后新加了一個9,
本來想要的結(jié)果是,當前還是顯示【6,7,8】,向下滑動后顯示【7,8,9】,
但出來的結(jié)果卻是【5,6,7】。。。

經(jīng)過打斷點測試,發(fā)現(xiàn)就是reloadData前后contentOffset值變化了,而且變化的還沒什么規(guī)律,
然后跟iOS 10及以下的系統(tǒng)對比,發(fā)現(xiàn)只有iOS 11上會這樣
所以基本可以確定是iOS 11的問題了

然后去看iOS 11有什么新變化,
原來iOS 11中,tableView默認啟用Self-Sizing

    @available(iOS 7.0, *)
    open var estimatedRowHeight: CGFloat // default is UITableViewAutomaticDimension, set to 0 to disable

    @available(iOS 7.0, *)
    open var estimatedSectionHeaderHeight: CGFloat // default is UITableViewAutomaticDimension, set to 0 to disable

    @available(iOS 7.0, *)
    open var estimatedSectionFooterHeight: CGFloat // default is UITableViewAutomaticDimension, set to 0 to disable

所以,tableView的contentSize大小一開始也是不準確的,會隨著滑動逐漸變化

知道了原因,就好解決了,只需要關閉這個功能就可以了

解決方案:

  tableView.estimatedRowHeight = 0
  tableView.estimatedSectionHeaderHeight = 0
  tableView.estimatedSectionFooterHeight = 0

注意三個屬性都需要設置,即使你沒用到sectionHeader或者sectionFooter也要設置?。?!
注意三個屬性都需要設置,即使你沒用到sectionHeader或者sectionFooter也要設置?。?!
注意三個屬性都需要設置,即使你沒用到sectionHeader或者sectionFooter也要設置?。?!

另外:

因為同樣的原因:用scrollRectToVisible來實現(xiàn)滑動到tableView底部的方法也行不通了,只能用
open func scrollToRow(at indexPath: IndexPath, at scrollPosition: UITableViewScrollPosition, animated: Bool)
注意判斷section和row沒有越界或者為負數(shù),否則會crash。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件,我們平時使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,282評論 3 38
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,967評論 1 9
  • { 24、Sqlite數(shù)據(jù)庫 1、存儲大數(shù)據(jù)量,增刪改查,常見管理系統(tǒng):Oracle、MSSQLServer、DB...
    CYC666閱讀 1,047評論 0 1
  • 焦點一期洛陽劉琳堅持分享第五十四天 今天一早起來和兩位老師一起約練,在練習過程當中,我們有咨詢師有來訪者有觀...
    小溪與大海閱讀 350評論 0 0
  • 在我們的生活中,我們永遠離不開好奇。好奇是我們的天性。好奇,就像一張無止境的答題卡,讓我們不斷地去發(fā)掘、探索答案。...
    檸sir閱讀 309評論 0 0

友情鏈接更多精彩內(nèi)容