之前面試撮执,常常被問到關(guān)于UITableView滑動(dòng)微峰,高度計(jì)算的問題,現(xiàn)在有時(shí)間正好來做一個(gè)小小的總結(jié)抒钱;
目前為止蜓肆,項(xiàng)目中用到做多的就是緩存高度;
由于tableView可以展示的類型很多谋币,圖文混排最為復(fù)雜也最為常用仗扬,如果每次調(diào)用heightForRow再計(jì)算高度,會(huì)給頁面造成卡頓蕾额,不流暢的現(xiàn)象早芭。
下面以項(xiàng)目中寫的一個(gè)查看物流信息的頁面為例,代碼展示如下:
@interface DJTrackDetailModel : NSObject
@property (nonatomic,strong) NSString? *context;//物流運(yùn)輸明細(xì)
@property (nonatomic,strong) NSString? *ftime;? //物流運(yùn)輸明細(xì)時(shí)間
@property (nonatomic,assign) CGFloat contentHeight; // 文本高度??? 自定義的
此為根據(jù)接口數(shù)據(jù)解析model诅蝶,文本高度為根據(jù)context計(jì)算 做的緩存退个,在ViewController中,代碼實(shí)現(xiàn)
orderModel = [DJOrderModel mj_objectWithKeyValues:responseModel.data];
??????? //計(jì)算物流信息高度
??????? CGSize size = [orderModel.expressData.context getTextSizeWithSystemFont:[UIFont systemFontOfSize:15.] maxSize:CGSizeMake(__gScreenWidth-49-25, MAXFLOAT)];
??????? if (size.height < 22) {
??????????? size.height = 22;
??????? }在這里將請(qǐng)求的數(shù)據(jù)秤涩,計(jì)算出高度帜乞,存進(jìn)model的contentHeight里。
? orderModel.expressData.contentHeight = size.height;
最終在heightForRow就可以直接獲取model然后返回高度即可筐眷。
總結(jié):
1.對(duì)于數(shù)據(jù)量較大的,可以在請(qǐng)求接口數(shù)據(jù)成功之后习柠,解析數(shù)據(jù)時(shí)直接計(jì)算文本匀谣、圖片的高度,緩存到model里资溃,這樣可以防止多次計(jì)算武翎;
2.在用到高度顯示的時(shí)候,直接取用溶锭,方便快捷宝恶。比專門放到一個(gè)數(shù)組里會(huì)省很多代碼量,而且邏輯更容易處理趴捅。
3.圖片也是類似的處理方式垫毙。可以根據(jù)圖片的數(shù)量拱绑,設(shè)定圖片的寬高综芥,緩存到model里。
----------------------不斷學(xué)習(xí)猎拨,不斷進(jìn)步------------------------