
正常reload-1.gif

異常reload-1.gif

正常reload-2.gif

異常reload-2.gif
異常:
經(jīng)過(guò)測(cè)試,異常只出現(xiàn)在iOS 11+的設(shè)備上,查了一些資料發(fā)現(xiàn)是 Self-Sizing 在 iOS 11 下默認(rèn)開(kāi)啟導(dǎo)致的.
異常原因:
執(zhí)行 reload操作時(shí) 會(huì)導(dǎo)致contentsize的重新計(jì)算
異常解析:
在 Self-Sizing 開(kāi)啟的狀態(tài)下,cell的行高是通過(guò)estimateRowHeight來(lái)計(jì)算的,contentsize也是不定的(只有cell顯示完的時(shí)候,contentsize才最終確定下來(lái))
當(dāng)此時(shí)執(zhí)行 reloadData操作時(shí),會(huì)調(diào)用 heightForRow 進(jìn)行布局,這就造成了contentSize的變化, 也就是tableview顯示區(qū)域的變化,進(jìn)而出現(xiàn)了亂跳的現(xiàn)象
解決方案:
關(guān)閉估算行高
tableView.estimatedRowHeight = 0;
當(dāng)使用到SectionHeader或者SectionFooter的時(shí)候
tableView.estimatedSectionHeaderHeight = 0;
tableView.estimatedSectionFooterHeight = 0;