iOS 非等高 Cell

将文本内容设置为自动换行

  • 设置了Label的左边和上边间距,将其位置定死。
iOS 非等高 Cell_第1张图片
  • Label的lines设置为0行才能正常执行自动换行功能( 我失败的图。。就不贴了
iOS 非等高 Cell_第2张图片
  • 限制Label的换行宽度
    • 我把换行宽度设置成了(屏幕宽度-20个像素)
    // 设置label每一行文字的最大宽度
    // 为了保证计算出来的数值 跟 真正显示出来的效果 一致
    self.contentLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
  • 看,可以换行了。只是内容超出了cell的高度,显得十分难看。
iOS 非等高 Cell_第3张图片

设置自定义cell高度

  • 往模型中添加一个cellHeight 属性,方便保存自定义cell的高度。

  • 在自定义cell中计算当前cell的高度

    • 强制布局,让计算机算出当前cell的高度
    • 根据有无图片的情况,获取cell高度
    [self layoutIfNeeded];  // 强制布局

    if (status.picture) {
        status.cellHeight = CGRectGetMaxY(self.pictureView.frame) + 10;
    }else {
        status.cellHeight = CGRectGetMaxY(self.contentLabel.frame) + 10;
    }
  • 首先在tabelViewControl 中,给出一个估算高度

之所以先返回一个大约高度,因为这样能避免 heightForRowAtIndexPath 方法在 cell 被创建之前就多次调用.这样既不会得不到 cell 的高度,也能一定程度优化程序性能.

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return 200;
}
  • 然后拿出模型中事先存放好的 cellHeight.
  • 返回每个cell的高度.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return [self.statuses[indexPath.row] cellHeight];
}
  • 大功告成
iOS 非等高 Cell_第4张图片

你可能感兴趣的:(iOS 非等高 Cell)