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

需求背景:
类似朋友圈,有文字,有图片,文字的高度不定,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高度计算好)