需求背景:
类似朋友圈,有文字,有图片,文字的高度不定,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滑动就会降低卡的程度,如果每次都计算的话,会使界面很卡,而且可能会出现跳动
网友评论