1为什么
因为当tableView滚动时会不停的回调- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;这个代理方法,当cell的高度需自适应内容时,就意味着每次回调这个方法时都要计算高度,而计算是要花时间了,在用户体验上的体现就是卡顿。为了避免重复且无意义的计算cell高度,缓存高度就显得尤为重要了。
2怎么
缓存高度需要一个可变数组,每当回调- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;这个方法时,我们先去这个数组里去取,如果有,就直接拿出来,如果没有,就计算高度,并且放进数组。
刷新tableView时记得清空高度缓存数组3总结:get
4 一行cell要展示在屏幕上,至少要执行5遍TableView的heightForRowAtIndexPath方法:
TableView配置部分:
① 当TableView视图即将展现在屏幕上时,会把所有行的行高数据进行拉取。
②当TableView在执行setLayoutMargins方法进行自身布局时会把所有行高数据进行拉取。
③TableView在执行layoutSubViews方法进行子视图布局时会再次把所有行高数据进行拉取。
TableViewCell配置部分:
④当使用cellID进行与TableView绑定的cell获取时会拉取本行cell的高度数据。
⑤当cell进行layoutSubViews方法进行布局时会再次拉取本行cell的高度数据。
网友评论