如何根据自动布局约束使容器视图的高度动态化?

时间:2013-11-08 07:06:58

标签: ios objective-c interface-builder autolayout

我在Xcode界面构建器中创建了一个自定义TableViewCell,其中UILabel和UITextView是垂直堆叠的,我设置了它们与容器单元视图之间的垂直间距约束。

enter image description here

UITextView可能需要保存大量文本,我不希望出现垂直滚动条,因此我使用[NSString sizeWithFont:constraintTosize:]计算UITextView的高度,并使用此新高度设置其框架。

但它不起作用。

然后我注意到.xib中的自定义单元格具有固定的行高。我想知道这个固定高度和垂直约束是否决定了UITextView的高度,我无法改变它?

如果我想要反过来怎么办:当我设置UITextView的高度时,根据约束计算包含单元格的高度?这可能吗?

1 个答案:

答案 0 :(得分:1)

以下代码应该会有所帮助。我能够在名为UILabel的自定义UITableViewCell内的CustomCell上执行您所描述的内容并对可变数量的文本进行说明。 CustomCell使用样板UITableViewCell代码而无需修改。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Configure the cell...
    // Using some sample text in here for testing purposes.
    NSString *sampleText = @"The UITextView may need to hold a lot of text, I don't want vertical scrollbar to appear. The UITextView may need to hold a lot of text, I don't want vertical scrollbar to appear.";

    cell.textLabel.text = sampleText;
    [cell.textLabel layoutIfNeeded];

    return cell.textLabel.frame.size.height;
}

最后但并非最不重要的是,使用AutoLayout在UILabel内设置CustomCell。请点击此链接查看有关如何执行此操作的步骤:https://stackoverflow.com/a/16009707/885189