先创建一个模型声明两个属性:
@property(nonatomic,copy)NSString*text; //文字
@property(nonatomic,copy)NSString*height; // 高度
在Controller上,添加一个TableView并实现其代理方法
声明一个全局数组:_dataArr =@[].mutableCopy;
要让tableview自适应文字高度,首先要计算文字高度
//返回Size
-(CGSize)lableAutoSizeWithText:(NSString*)text Font:(NSInteger)font MaxSize:(CGSize)maxSize{
NSDictionary*dic = @{NSFontAttributeName:[UIFontsystemFontOfSize:font]};
return[textboundingRectWithSize:maxSizeoptions:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading |NSStringDrawingTruncatesLastVisibleLine attributes:diccontext:nil].size;
}
//赋值
for(inti = 0; i < 20; i++) {
NSIntegernum = arc4random() % 50;
NSString*subString = [str substringFromIndex:num];
//开始计算文字高度
CGFloatheight = [selflableAutoSizeWithText:subStringFont:14MaxSize:CGSizeMake(300,10000)].height;
LYHightModel*model = [[LYHightModelalloc]init];
//属性赋值,比kvc赋值更快 ,如果属性多的话,还是首选kvc赋值
model.text= subString;
model.height= [NSStringstringWithFormat:@"%f",height];
[_dataArraddObject:model];
}
//cell 的高度
-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{
LYHightModel*model = _dataArr[indexPath.row];
return[model.heightfloatValue] + 20;
}
最后一步
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
staticNSString*str = @"cell";
UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:str];
if(cell == nil) {
cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:str];
UILabel*lable = [[UILabelalloc]init];
[lable setNumberOfLines:0];
[lable setTag:123];
[lable setFont:[UIFontsystemFontOfSize:14]];
[cell.contentViewaddSubview:lable];
}
LYHightModel*model = _dataArr[indexPath.row];
//找到lable
UILabel*lable = [cell.contentViewviewWithTag:123];
//计算lable的frame
[lable setFrame:CGRectMake(10,10,cell.contentView.frame.size.width- 30, [model.heightfloatValue])];
//为lable赋值
[lable setText:model.text];
returncell;
}
这样就OK了