iOS tableViewCell 计算高度

首先明确目标,如何实现Cell高度自适应高度,这里我选择自己算高度的方法实现

###

效果2


效果1
03-声音01.png

1.这里需要每个cell的高度

#pragma mark - 代理方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return self.topics[indexPath.row].cellHeight;
}

2.取模型里创建一个属性

@property (nonatomic, assign) CGFloat cellHeight;

3.在模型的.m属性方法中计算(不是set方法)



- (CGFloat)cellHeight
{
    // 如果cell的高度已经计算过, 就直接返回
    if (_cellHeight) return _cellHeight;
    
    // 1.头像
    _cellHeight = 55;
Snip20170323_3.png
 // 2.文字
 CGFloat textMaxW = [UIScreen mainScreen].bounds.size.width - 2 * Margin;
 CGSize textMaxSize = CGSizeMake(textMaxW, MAXFLOAT);

 CGSize textSize = [self.text boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15]} context:nil].size;
 _cellHeight += textSize.height + Margin;

   // 3.中间的内容
   if (self.type != TopicTypeWord) { // 如果是图片\声音\视频帖子, 才需要计算中间内容的高度
       // 中间内容的高度 == 中间内容的宽度 * 图片的真实高度 / 图片的真实宽度
       CGFloat contentH = textMaxW * self.height / self.width;
       
       if (contentH >= [UIScreen mainScreen].bounds.size.height) { // 超长图片
           // 将超长图片的高度变为200
           contentH = 200;
           self.bigPicture = YES;
       }
       
       // 这里的cellHeight就是中间内容的y值
       self.contentF = CGRectMake(Margin, _cellHeight, textMaxW, contentH);
       
       // 累加中间内容的高度
       _cellHeight += contentH + Margin;
   }

注:这里涉及到图片的拉伸问题,解决方法,图片返回数据里有宽高,利用 图片返回宽度/屏幕显示宽度 * 图片返回高度。

// 屏幕宽度 == 375
// 图片显示出来的宽度 == 355
// 图片显示出来的高度 == 355 * 300 / 710

// 服务器返回的图片宽度 == 710
// 服务器返回的图片高度 == 300

  
    
    // 5.底部 - cell之间的距离
    _cellHeight +=  Margin;
    
    return _cellHeight;
}

计算的高度会返回给tableView的数据源方法,进而确定Cell高度

你可能感兴趣的:(iOS tableViewCell 计算高度)