1.前言
iOS开发中,我们常见的性能优化就属对tableView的性能优化,今天在这里记录一下tableViewCell自适应高度的优化,在这里要引入一个框架:UITableView+FDTemplateLayoutCell (在这里是需要配合autolayout来使用,这里用的是masonry,不赘述了)。
2.UITableView+FDTemplateLayoutCell
UITableView+FDTemplateLayoutCell是自动进行UITableViewCell高度计算的,项目地址:点我跳转,官方介绍:点我跳转。
使用方法很简单。
1.需要在TableView中注册Cell
如下:
1 | [_tableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:kMyTableViewCell]; |
因为注册了cell,所以cellforrow方法里如果调用了dequeueReusableCellWithIdentifier重用方法,就不会再走!cell不存在的方法,而是系统会自动调用他自己的- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier,在这里需要注意一下。
2.自定义Cell使用Masonry布局
1 | [self.iconView mas_makeConstraints:^(MASConstraintMaker *make) { |
另外说一句,控件一定要加在cell的contentView上。
3. cellforRow方法
1 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ |
4.height方法里
1 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ |
3和4中都调用了[cell reloadWithModel:Model]方法,区别在于一个是加载cell内容,另一个是预加载cell内容。
5.注意
1.指定最下面view的bottom约束,这样才能够确切的计算出Cell的高度。在上面的例子中最下面的view是self.contentLabel,要对其bottom进行约束。
2.heightForRowAtIndexPath 方法去掉时候,如果调用同一个cell在,会出现自适应高度,其实cell自适应高度需要预估值,当cell高度不统一时,会出现严重卡顿现象。