tableView代理方法執行順序,隨着iOS系統版本的不斷升級,執行順序也有所變化
1.iOS7.1
中先依次調一遍heightForRow方法再依次調一遍cellForRow
方法,在調cellForRow
方法的時候並不會再調一次對應的heightForRow方法。
2.iOS8
中先依次調heightForRow
(如果行數超過屏幕依次調用兩次,如果行數很少,沒有超過屏幕,只依次調用一次),之后每調一次cellForRow
的時候又調一次對應的heightForRow
方法。
3.iOS9
和iOS10
中,heightForRow
方法會先調用三次,然后每調用一次cellForRow
的時候再調用一次對應的heightForRow
。
4.因為iOS11中tableView的estimatedRowHeight默認值由原來的0變為UITableViewAutomaticDimension(打印出來為-1),所以每一次先調用cellForRow
又調一次對應的heightForRow
方法。
如果把estimatedRowHeight設為0,則還是會先遍歷一次每個cell的tableView:heightForRowAtIndexPath:獲取總的高度值 然后每調用一次cellForRow
的時候再調用一次對應的heightForRow。