【问题标题】:How to make a container view's height dynamic based on auto layout constraints?如何根据自动布局约束使容器视图的高度动态化?
【发布时间】:2013-11-08 07:06:58
【问题描述】:

我在 Xcode 界面生成器中制作了一个自定义的 TableViewCell,一个 UILabel 和一个 UITextView 垂直堆叠,并设置了它们与容器单元格视图之间的垂直间距约束。

UITextView 可能需要容纳很多文本,我不希望出现垂直滚动条,所以我用 [NSString sizeWithFont:constraintTosize:] 计算 UITextView 的高度,并将其框架设置为这个新高度。

但它不起作用。

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

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

【问题讨论】:

  • 顺便说一句,我认为尽管Apple在自动布局等UI布局方面做出了努力,但与HTML / CSS框模型相比仍然逊色很多。
  • UITableViewDelegate 有一个方法 tableView:heightForRowAtIndexPath: - 计算高度并从这个方法返回。
  • 性能 > 更简单的布局
  • @0xSina 当然我可以手动计算单元格高度,但那样自动布局约束将无用,你不觉得吗?
  • @NeoWant 自动布局/约束仍然在 UITableViewCell 中工作(就像任何其他视图一样)......但是每个单元格的大小由 UITableView 的 rowHeight 或它的委托决定。为什么?这就是 UITableView 的工作原理。它以这种特定的方式管理它的视图层次结构,使其非常优化/不滞后。想象一个包含 100 个单元格的表格视图(非常常见)。然后它将如何遍历每个单元格,应用约束并确定其自身的 contentSize...非常低效,这也是 HTML/CSS 框模型/webviews 虽然在您看来优越,但非常滞后/低效的原因之一。跨度>

标签: ios objective-c interface-builder autolayout


【解决方案1】:

以下代码应该会有所帮助。我能够做你所描述的事情,并在一个名为CustomCell 的自定义UITableViewCell 中解释UILabel 上的可变数量的文本。 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 在您的 CustomCell 中设置您的 UILabel。请点击此链接查看有关如何执行此操作的步骤:https://stackoverflow.com/a/16009707/885189

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 2019-05-18
    • 2015-08-02
    • 2014-06-25
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多