1能颁、使用前提
和每個(gè) UITableViewCell ReuseID 一一對(duì)應(yīng)的 template layout cell
這個(gè) cell 只為了參加高度計(jì)算,不會(huì)真的顯示到屏幕上旁涤;它通過 UITableView 的 -dequeueCellForReuseIdentifier: 方法 lazy 創(chuàng)建并保存,所以要求這個(gè) ReuseID 必須已經(jīng)被注冊(cè)到了 UITableView 中迫像,也就是說劈愚,要么是 Storyboard 中的原型 cell,要么就是使用了 UITableView 的 -registerClass:forCellReuseIdentifier: 或 -registerNib:forCellReuseIdentifier:其中之一的注冊(cè)方法闻妓。
例:
NSString *const MJMCommentViewCell = @"MJMCommentViewCell";
自動(dòng)布局
2菌羽、使用方法
修改TableViewDelegate方法
例:
重寫模板中的sizeThatFits方法(例:JMCommentViewCell)
例:
注:(1)totalHeight依次累加控件高度和控件間的間隔,不需要累加所有控件由缆,只需要累加計(jì)算cell高度需要的控件即可注祖;(2)添加圖片計(jì)算高度時(shí)會(huì)有問題,返回的是圖片的真實(shí)高度均唉,而不是控件高度(設(shè)置尺寸也不起作用)是晨,如果圖片控件高度已知或一定,可以累加該高度舔箭。
3罩缴、根據(jù) index path 的高度緩存機(jī)制
計(jì)算出的高度會(huì)自動(dòng)進(jìn)行緩存,所以滑動(dòng)時(shí)每個(gè) cell 真正的高度計(jì)算只會(huì)發(fā)生一次层扶,后面的高度詢問都會(huì)命中緩存箫章,減少了非常可觀的多余計(jì)算镜会。
- (CGFloat)fd_heightForCellWithIdentifier:(NSString *)identifier cacheByIndexPath:(NSIndexPath *)indexPath configuration:(void (^)(id cell))configuration;
- (CGFloat)fd_heightForCellWithIdentifier:(NSString *)identifier cacheByKey:(id)key configuration:(void (^)(id cell))configuration;
自動(dòng)的緩存失效機(jī)制
當(dāng)調(diào)用如-reloadData炉抒,-deleteRowsAtIndexPaths:withRowAnimation:等任何一個(gè)觸發(fā) UITableView 刷新機(jī)制的方法時(shí),已有的高度緩存將以最小的代價(jià)執(zhí)行失效稚叹。如刪除一個(gè) indexPath 為 [0:5] 的 cell 時(shí)焰薄,[0:0] ~ [0:4] 的高度緩存不受影響拿诸,而 [0:5] 后面所有的緩存值都向前移動(dòng)一個(gè)位置。自動(dòng)緩存失效機(jī)制對(duì) UITableView 的 9 個(gè)公有API都進(jìn)行了分別的處理塞茅,以保證沒有一次多余的高度計(jì)算亩码。