之前面试,常常被问到关于UITableView滑动,高度计算的问题,现在有时间正好来做一个小小的总结;
目前为止,项目中用到做多的就是缓存高度;
由于tableView可以展示的类型很多,图文混排最为复杂也最为常用,如果每次调用heightForRow再计算高度,会给页面造成卡顿,不流畅的现象。
下面以项目中写的一个查看物流信息的页面为例,代码展示如下:
@interface DJTrackDetailModel : NSObject
@property (nonatomic,strong) NSString *context;//物流运输明细
@property (nonatomic,strong) NSString *ftime; //物流运输明细时间
@property (nonatomic,assign) CGFloat contentHeight; // 文本高度 自定义的
此为根据接口数据解析model,文本高度为根据context计算 做的缓存,在ViewController中,代码实现
orderModel = [DJOrderModel mj_objectWithKeyValues:responseModel.data];
//计算物流信息高度
CGSize size = [orderModel.expressData.context getTextSizeWithSystemFont:[UIFont systemFontOfSize:15.] maxSize:CGSizeMake(__gScreenWidth-49-25, MAXFLOAT)];
if (size.height < 22) {
size.height = 22;
}在这里将请求的数据,计算出高度,存进model的contentHeight里。
orderModel.expressData.contentHeight = size.height;
最终在heightForRow就可以直接获取model然后返回高度即可。
总结:
1.对于数据量较大的,可以在请求接口数据成功之后,解析数据时直接计算文本、图片的高度,缓存到model里,这样可以防止多次计算;
2.在用到高度显示的时候,直接取用,方便快捷。比专门放到一个数组里会省很多代码量,而且逻辑更容易处理。
3.图片也是类似的处理方式。可以根据图片的数量,设定图片的宽高,缓存到model里。
----------------------不断学习,不断进步------------------------
网友评论