获取包含文本的自动布局单元格的高度

时间:2015-01-15 19:08:33

标签: ios interface-builder autolayout

我正在尝试实现heightForRowAtIndexPath,并希望使用我已经布局的原型单元格和自动布局来查找高度。我已经尝试了以下所有方法,它们都没有给我真正的牢房高度。在贴标签之前,它们似乎给了我单元格的高度。

我知道我可以使用NSString方法找到每个字符串的高度,并以这种方式计算出单元格的高度,但如果我走这条路,我基本上会复制自动布局'功能,必须在两个地方维护单元格的布局。我真的想避免这种情况,并且我假设我在这里错过了一些非常简单的东西。

我的原型单元格的高度在IB中设置为67,内容视图的高度在IB中设置为66.

enter image description here

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"in heightForRowAtIndexPath: %@", indexPath);

    if (!self.prototypeCell)
    {
        self.prototypeCell = [self.tableView dequeueReusableCellWithIdentifier:@"MessageCell"];
    }

    // set the text in the labels
    [self configureCell:self.prototypeCell forIndexPath:indexPath isForOffscreenUse:YES];

    [self.prototypeCell setNeedsLayout];
    [self.prototypeCell layoutIfNeeded];

    // this gives 58 regardless of the length of the text in my labels
    CGSize contentViewSize = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    // this gives me 58.5 regardless of the length of text in my labels
    CGSize cellSize = [self.prototypeCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

    return cellSize.height;
}

1 个答案:

答案 0 :(得分:0)

我通过设置标签的首选宽度来修复此问题:

// the label is inside the table view 8 points from each edge
messageCell.message.preferredMaxLayoutWidth = tableView.frame.size.width - 16;