iOS消息单元宽度/高度使用自动布局

目标

我正在尝试使用自动布局创build一个dynamic消息单元格。

在这里输入图像说明

我所试过的

单元格的定位正确,大部分情况下,自动布局给定了以下限制:

在这里输入图像说明

问题

我的第一个问题是消息标签(可复制标签)宽度受到限制。 这似乎是通过使用setPreferredMaxLayoutWidth:解决setPreferredMaxLayoutWidth: 如此问题中所述 。

身高仍然是一个问题。 正如你所看到的,消息泡沫仍然被切断。 另外,我不确定如何确定表视图的消息单元高度。

我预计自动布局不知何故只是工作。 我已经阅读了这里的答案 ,但似乎很多的步骤。

问题

首先,自动布局比传统的帧algorithm更复杂吗?

其次,使用自动布局,我怎样才能确定最终的单元格的高度?

我完全使用自动布局,你所说的是一个问题。 我不想修改为UITable的性能目的计算固有尺寸的方式。

所以我用了一个非常简单的方法,最终是正确的。 如果你的单元格很简单,如果你的单元格包含多于一个可变文本,就会变得很难。

我通常定义我的单元格,在那里你可以放一个UILabel符合插入(没有问题)。 然后,在你的表格数据源中,直接定义单元格的高度:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return [TEXTOFYOURCELL sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, 1000)].height + 31; // Here it's defined for 15 of top and bottom insets, define +1 than the size of the cell is important. } 

编辑:这里有一些关于单元格中的UILabel的代码(在init方法中)。

 __titleLabel = [UILabel new]; __titleLabel.numberOfLines = 0; [self.contentView addSubview:__titleLabel]; // adding to contentView rather than self is very important ! [__titleLabel keepInsets:UIEdgeInsetsMake(0, 15, 0, 15)]; 

我使用这个API: https : //github.com/iMartinKiss/KeepLayoutpipe理自动布局更简单。

在iOS 8上可以在AppCoda上阅读

基本上:

  • 将标签线设置为0。
  • 设置行高度UITableViewAutomaticDimension