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。