美文网首页
tableview优化--什么叫提前在model里把cell高度

tableview优化--什么叫提前在model里把cell高度

作者: 小雨hahaha | 来源:发表于2019-11-12 12:33 被阅读0次

    需求背景:
    类似朋友圈,有文字,有图片,文字的高度不定,cell的高度需要根据文字和图片的数量进行计算


    我们知道tableview的delegate里面有两个方法

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    

    使用MVC的方式,对这个问题进行解析,M---model, V---cell, 所谓的提前计算高度就是在model里将高度计算好,抛一个property出去,在heightForRow方法里取model的时候,直接把height取出来使用。

    以下是手码的伪代码,直接在这里打的哈,可能不能运行

    @interface model : NSObject
    
    @property (nonatomic, assign) CGFloat cellHeight;
    @property (nonatomic, copy) NSArray *picArray;
    @property (nonatomic, copy) NSString *content;
    
    • (void)caculateForCellHeight;
      @end

      @implementation model
      
      - (void)caculateForCellHeight
      {
        self.cellHeight = 0;
        if (self.picArray.count > 0) {
             self.cellHeight  += onePicHeight * picRow;
          }
        if (self.content.lenght > 0) {
           UILabel label= [[UILabel alloc] initWithFrame:[在cell里承接centent的cell一样的尺寸,高可以是任意,宽要和cell里的一样]];
           label.numberOfLine = 0; // 属性设置,如font行数等等
            CGSize contentSize = [label sizeThatFits:CGSizeMake(label.width, MAXFLOAT)];
           self.cellHeight +=contentSize.height;
        }
      }
      
      @end
      

    controller里给model赋值的时候,就直接调用一次caculateForCellHeight方法,在heightForRow里就可以直接根据index取出对应的model,从model里取出cellHeight,这样tableview滑动就会降低卡的程度,如果每次都计算的话,会使界面很卡,而且可能会出现跳动

    相关文章

      网友评论

          本文标题:tableview优化--什么叫提前在model里把cell高度

          本文链接:https://www.haomeiwen.com/subject/coifictx.html