dynamic增加UILabel&TableView Cell的高度?

我有一个UITableView中显示一个自定义单元格。我的单元格有两个标签和一个视图如下图所示。

在这里输入图像说明

我已经给这个左视图的约束了

项目标签约束

在这里输入图像说明

中心视图约束

在这里输入图像说明

正确的视图constarints

在这里输入图像说明 我正在使用一个bean类来存储两个标签的数据,并将该bean对象添加到一个数组中。我在heightForRowAtIndexPath中使用下面的代码。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // Calculate a height based on a cell if(!self.customCell) { self.customCell = [self.tableView dequeueReusableCellWithIdentifier:@"thirdcell"]; } // Configure the cell Instrument *inst=[arr_instSpecs objectAtIndex:indexPath.row]; self.customCell.label_item.text=inst.item; self.customCell.label_desc.text=inst.desc; // Layout the cell [self.customCell layoutIfNeeded]; // Get the height for the cell CGFloat height = [self.customCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; // Padding of 1 point (cell separator) CGFloat separatorHeight = 1; return height + separatorHeight; } 

问题既不是标签的高度增加也不是表格单元格。我已经解释了一切。 当标签的文字增加时,我想要使标签尺寸增加,并且当标签尺寸增加时,则细胞高度必须增加。

首先,您不应该在自动布局环境中手动计算高度。 只需将标签TopSpace和BottomSpace设置为单元格的contentView,并确保将标签NumberOfLines设置为0,将LineBreakMode设置为WordWrap。

另一个约束如下,

ItemLabel:

在这里输入图像说明

SeparatorView:

在这里输入图像说明

DescriptionLabel:

在这里输入图像说明

并添加如下代表高度的代表,

 #pragma mark - UITableView Delegates -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { return 44.0; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewAutomaticDimension; } 

你应该得到如下的输出,

在这里输入图像说明

希望这会帮助你。

您需要在视图加载时定义最大估计高度

 tblObject.estimatedRowHeight = 300; tblObject.rowHeight = UITableViewAutomaticDimension; 

这是我的工作。

1)设置编号 的行数为0。

2)设置LineBreakage。

在这里输入图像说明

3)添加约束。

在这里输入图像说明

4)改变垂直内容拥抱优先。

在这里输入图像说明

5)在ViewDidLoad上:

 override func viewDidLoad() { super.viewDidLoad() self.sampleTableView.estimatedRowHeight = 600.0; self.sampleTableView.rowHeight = UITableViewAutomaticDimension; self.sampleTableView.setNeedsLayout() self.sampleTableView.layoutIfNeeded() } 

6)在TableView自定义单元格上:

 override func awakeFromNib() { super.awakeFromNib() // Initialization code sizeToFit() layoutIfNeeded() } 

将您的标签约束放在单元格的底部,底部单元格,并保持您的前导和尾随约束。 在

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

通过使用UITableViewAutomaticDimension将根据您的标签的内容增长您的tableview单元格的高度,最重要的一点是, select您的标签,然后去Identity Inspector和行数,写0

要设置行高和估计行高的自动尺寸,请确保以下步骤,自动尺寸有效的单元格/行高度布局。

  • 分配和实施数据源和委托
  • UITableViewAutomaticDimension分配给rowHeight&estimatedRowHeight
  • 实现委托/数据源方法(即heightForRowAt并返回一个值UITableViewAutomaticDimension它)

 @IBOutlet weak var table: UITableView! override func viewDidLoad() { super.viewDidLoad() // Don't forget to set dataSource and delegate for table table.dataSource = self table.delegate = self // Set automatic dimensions for row height table.rowHeight = UITableViewAutomaticDimension table.estimatedRowHeight = UITableViewAutomaticDimension } // UITableViewAutomaticDimension calculates height of label contents/text func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension } 

对于UITableviewCell中的标签实例

  • 设置行数= 0(&line break mode = truncate tail)
  • 相对于其超级视图/单元格容器设置所有约束(顶部,底部,左侧)。
  • 可选 :即使没有数据,如果您希望标签覆盖的最小垂直面积,请设置标签的最小高度。

在这里输入图像说明