iOS小笔记之 cell缓存高度

之前面试,常常被问到关于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里。

----------------------不断学习,不断进步------------------------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。