TableView文字自适应高度

先创建一个模型声明两个属性:

@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];

   //计算lableframe

  [lable setFrame:CGRectMake(10,10,cell.contentView.frame.size.width- 30, [model.heightfloatValue])];

   //lable赋值

  [lable setText:model.text];

  returncell;

 

}



这样就OK了


你可能感兴趣的:(ios,tableview,文字自适应高度)