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

时间:2013-11-15 16:08:40

标签: ios uitableview autolayout

目标

我正在尝试使用自动布局创建动态消息单元格。

enter image description here

我尝试过什么

在大多数情况下,单元格正确定位,并具有以下约束条件下的自动布局:

enter image description here

问题

我的第一个问题是消息标签(可复制标签)宽度受到限制。这似乎是使用this question中描述的setPreferredMaxLayoutWidth:来解决的。

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

我预计自动布局会以某种方式正常工作。我已经阅读了answer here,但步骤似乎很多。

问题

首先,自动布局是否比传统的帧算法更复杂?

其次,使用自动布局,如何确定结果单元格的高度?

2 个答案:

答案 0 :(得分:5)

我完全使用自动布局,你所说的有点问题。 我不想修改为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/KeepLayout来简化自动布局管理。

答案 1 :(得分:2)

这可以在iOS 8上进行,因为可以在AppCoda

上阅读

基本上:

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