1為什么
因?yàn)楫?dāng)tableView滾動時會不停的回調(diào)- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;這個代理方法,當(dāng)cell的高度需自適應(yīng)內(nèi)容時,就意味著每次回調(diào)這個方法時都要計(jì)算高度,而計(jì)算是要花時間了,在用戶體驗(yàn)上的體現(xiàn)就是卡頓。為了避免重復(fù)且無意義的計(jì)算cell高度,緩存高度就顯得尤為重要了。
2怎么
緩存高度需要一個可變數(shù)組,每當(dāng)回調(diào)- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;這個方法時,我們先去這個數(shù)組里去取,如果有,就直接拿出來,如果沒有,就計(jì)算高度,并且放進(jìn)數(shù)組。
3總結(jié):get
4 一行cell要展示在屏幕上,至少要執(zhí)行5遍TableView的heightForRowAtIndexPath方法:
TableView配置部分:
① 當(dāng)TableView視圖即將展現(xiàn)在屏幕上時,會把所有行的行高數(shù)據(jù)進(jìn)行拉取。
②當(dāng)TableView在執(zhí)行setLayoutMargins方法進(jìn)行自身布局時會把所有行高數(shù)據(jù)進(jìn)行拉取。
③TableView在執(zhí)行l(wèi)ayoutSubViews方法進(jìn)行子視圖布局時會再次把所有行高數(shù)據(jù)進(jìn)行拉取。
TableViewCell配置部分:
④當(dāng)使用cellID進(jìn)行與TableView綁定的cell獲取時會拉取本行cell的高度數(shù)據(jù)。
⑤當(dāng)cell進(jìn)行l(wèi)ayoutSubViews方法進(jìn)行布局時會再次拉取本行cell的高度數(shù)據(jù)。