UITableView方法的执行顺序
2018-04-21 本文已影响0人
Mr_Watson
UITableView方法执行顺序
一、估算方法实现 估算高度不为0
1.确定单元数
numberOfSectionsInTableView
numberOfSectionsInTableView
/
2.确定每单元的表头尾预估高度
estimatedHeightForHeaderInSection - section
estimatedHeightForFooterInSection - section
3.确定行数
numberOfRowsInSection - section
4.确定cell预估高度
estimatedHeightForRow - section - row * rowNumber
/ *sectionNumber
numberOfSectionsInTableView
/
estimatedHeightForHeaderInSection - section
estimatedHeightForFooterInSection - section
numberOfRowsInSection - section
estimatedHeightForRow - section - row * rowNumber
/ *sectionNumber
/
5.获取cell
cellForRowAtIndexPath - section - row
6.返回cell的高度
heightForRow - section - row
7.返回footerView的高度
heightForFooter - section — > - section - 0
8.cell将在屏幕显示
willDisplayCell - section - row
/ *sectionNumber *rowNumber
/
9.返回headerView的高度
heightForHeader - section
10.显示headerView
viewForHeaderInSection - section
11.headerView将在屏幕显示
willDisplayHeaderView - section
12.显示footerView
viewForFooterInSection - section
13.footerView将在屏幕显示
willDisplayFooterView - section
/ *sectionNumber
/
14.再次返回cell的高度
heightForRow - section - row
/ *sectionNumber *rowNumber
//高度超出屏幕继续下拉 - 5, 6, 8 方法
/
cellForRowAtIndexPath - section - row
heightForRow - section - row
willDisplayCell - section - row
/ *sectionNumber *(rowNumber - screenRows)
二、估算方法实现 估算高度为0 设置表头尾失败 不要这么设置
1.确定单元数
numberOfSectionsInTableView
numberOfSectionsInTableView
/
2.确定每单元的表头尾预估高度
estimatedHeightForHeaderInSection - section
estimatedHeightForFooterInSection - section
3.确定行数
numberOfRowsInSection - section
4.确定cell预估高度
estimatedHeightForRow - section - row * rowNumber
/ *sectionNumber
numberOfSectionsInTableView
/
estimatedHeightForHeaderInSection - section
estimatedHeightForFooterInSection - section
numberOfRowsInSection - section
estimatedHeightForRow - section - row * rowNumber
/ *sectionNumber
/
5.获取cell
cellForRowAtIndexPath - section - row
6.返回cell的高度
heightForRow - section - row
7.cell将在屏幕显示
willDisplayCell - section - row
/ *sectionNumber *rowNumber
//高度超出屏幕继续下拉 5, 6, 7
/
cellForRowAtIndexPath - section - row
heightForRow - section - row
willDisplayCell - section - row
/ *sectionNumber *(rowNumber - screenRows)
三、初始化时使估算高度失效
viewDidLoad
{
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
}
1.确定单元数
numberOfSectionsInTableView
numberOfSectionsInTableView
/
2.确定每单元的表头尾高度
heightForHeader - section
heightForFooter - section
3.确定行数
numberOfRowsInSection - section
4.确定cell高度
heightForRow - section - row * rowNumber
/ *sectionNumber
numberOfSectionsInTableView
/
heightForHeader - section
heightForFooter - section
numberOfRowsInSection - section
heightForRow - section - row * rowNumber
/ *sectionNumber
/
5.获取cell
cellForRowAtIndexPath - section - row
6.返回cell的高度
heightForRow - section - row
7.cell将在屏幕显示
willDisplayCell - section - row
/ *sectionNumber *rowNumber
/
8.显示headerView
viewForHeaderInSection - section
9.headerView将在屏幕显示
willDisplayHeaderView - section
10.显示footerView
viewForFooterInSection - section
11.footerView将在屏幕显示
willDisplayFooterView - section
/ *sectionNumber
//高度超出屏幕继续下拉 5, 6, 7
/
cellForRowAtIndexPath - section - row
heightForRow - section - row
willDisplayCell - section - row
/ *sectionNumber *(rowNumber - screenRows)
PS:
1.尽量在初始化tableView时设置高度属性
self.tableView.rowHeight = ;
self.tableView.sectionHeaderHeight = ;
self.tableView.sectionFooterHeight = ;
self.tableView.estimatedRowHeight = ;
self.tableView.estimatedSectionHeaderHeight = ;
self.tableView.estimatedSectionFooterHeight = ;
目的:减少方法执行
在初始化设置,不写相关代理方法,则
estimatedHeightForHeaderInSection / estimatedHeightForFooterInSection / estimatedHeightForRow
heightForHeader / heightForFooter / heightForRow 方法不会执行
2.初始化时设置
self.tableView.estimatedRowHeight = 0; // set to 0 to disabled
self.tableView.estimatedSectionHeaderHeight = 0; // set to 0 to disabled
self.tableView.estimatedSectionFooterHeight = 0; // set to 0 to disabled
则计算高度为heightForHeader / heightForFooter / heightForRow方法,否则计算高度为estimatedHeightForHeaderInSection / estimatedHeightForFooterInSection / estimatedHeightForRow (两种代理方法同时调用的前提下)
3.如果设置了headerView / footerView,
estimatedHeightForHeaderInSection / estimatedHeightForFooterInSection(估算高度设为0则只调用1次) // heightForHeader / heightForFooter 方法会连续调用2次