UITableViewCell自动高度基于UILabel文本的数量

我的故事板中有一个棘手的设置,我有一个UIViewController,它包含一个UITableViewController。 在UITableViewController中,我有几个原型单元,我已经链接到代码中的子类uitableviewcell对象。

使用约束和故事板我想根据UILabel最终的大小来改变原型单元格的高度,这取决于进入它的文本。

目前我有一个

UIViewController -- UITableViewController -- -- UITableViewCell ((melchat) prototype cell) -- -- -- ContentView -- -- -- -- UIView ((background) view with drop shadow card type effect) -- -- -- -- -- UIImageView (Avatar) -- -- -- -- -- IUlabel (dynamic (depending on code/input) multi line UILabel) 

有些我希望UILabel调整UIView(背景)的大小然后反过来影响UITableViewCell的高度。

我正在使用XCode 8.2.1

我在故事板中采用了布局的屏幕截图并应用了约束。

在此处输入图像描述

更新

我已经更新了我的约束,几乎所有回到ContentView并将uilabel行计数更新为0,然后还实现了UITableViewAutomaticDimension代码,但它仍然无法正常工作。 请参阅下面的代码和屏幕截图。

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; } 

在此处输入图像描述

在此处输入图像描述

再谈Dao的答案..

他是对的,你需要使用UITableViewAutomaticDimension

此外,您需要确保以一种方式设置约束,即单元格中的所有内容都被约束到单元格contentView。 所以你的标签可能需要诸如此类的限制

  • 对ImageView的主要约束
  • 对contentView的最高约束
  • 对contentView的底部约束
  • 跟踪contentView的约束

确保将UILabel设置为多行(或行= 0),它应该可以工作。

如果您正在使用heightForRowAt委托函数,请确保返回UITableViewAutomaticDimension

使用UITableViewAutomaticDimension

 tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 300 

步骤1:给予contentView内部的UIView以下约束。

  • 对contentView的主要约束
  • 对contentView的最高约束
  • 对contentView的底部约束
  • 跟踪contentView的约束

step2:给UIlabel提供以下约束

  • 对UIImageView的主要约束
  • 对UIView的最高约束
  • 对UIView的底限制
  • 跟踪UIView的约束

step3:然后选择IUlabel的Trailing约束并选择edit选项,然后选择constant并选择greaterThanEqual选项。

step4:设置label的numberofline = 0

步骤5:将此代码添加到viewDidLoad()

 yourtableview.estimatedRowHeight = 80.0 yourtableview.rowHeight = UITableViewAutomaticDimension 

填充UILabel并应用约束后,获取标签的高度并将其设置为UIView的高度。

之后调用-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath并传递UILabel / UIView的高度,以便它获得该行的实际高度