UITableViewCell高度自适应

作者: __Mr_Xie__ | 来源:发表于2020-01-03 16:35 被阅读0次

目录

  • 前言
  • 使用步骤
  • demo 链接

一、前言

iOS8 以后苹果推荐的使用 UITableView 的属性 estimatedRowHeightrowHeight = UITableView.automaticDimension 来做 UITableViewCell 的自动适配行高的功能。

当然你也可以重写 UITableViewDelegate 的两个代理方法来实现
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(7.0));

注⚠️:通过属性实现自动适配行高通过代理实现自动适配行高 最好选择其一,或者可能出现这样或那样的问题。

二、使用步骤

(1)设置 UITableView 属性 代理;

  • 设置 UITableView 属性
tableView.rowHeight = UITableView.automaticDimension
// estimatedRowHeight一般设置为TableViewCellView的默认高度
tableView.estimatedRowHeight = 300.0
  • 设置 UITableView 的代理
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
     return 300
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
     return UITableView.automaticDimension
}

(2)在 celllayoutSubviews 方法中布局子控件;

注⚠️:针对 cell 子控件的布局阐述:

  • 只对需要自适应高度的 UILabel 上下左右进行限制就可以了,不要对高度和宽度做限定;
  • 除了需要自适应高度的 UILabel,其他的子控件正常布局就可以了;

(3)给 cell 赋值完成之后,调用 layoutIfNeeded 方法;

注⚠️:当 cell 调用 layoutIfNeeded 方法后,会立即调用 layoutSubviews 方法去布局 cell 的子控件。

三、demo 链接

demo

四、Author

如果你有什么建议,可以关注我的公众号:iOS开发者进阶,直接留言,留言必回。

相关文章

网友评论

    本文标题:UITableViewCell高度自适应

    本文链接:https://www.haomeiwen.com/subject/brvzoctx.html