Xcode 6 - iOS8 - Auto Layout 如何正确设置约束优先级

Xcode 6 - iOS8 - Auto Layout how to set constraint priorities right

我正在尝试使用自动布局来动态调整 UITableViewCell 的高度。对于基本的单元格设计,比如行中的标签,我已经设法实现了我想要的。但我无法让它为以下工作:

设置

这是原型单元格:

左边的图片有固定的高度。标题文本应该增长以适应完整的文本。这是一个行设置为 0 的标签。副标题不应增长,因为它只会是短文本。

我的约束设置

问题

无论如何,我希望超级视图的底部 space 为 18 个单位。这意味着,如果文本的(标题 + 副标题)高度小于图像的高度。图像的底部约束应确保 18 个单位的底部边距。如果标题变高,文字总高度高于图片,则字幕的底部约束应保证18 unity bottom margin,忽略图片的底部约束。

感谢您提出解决此问题的任何建议,因为我现在只是在约束中输入一些随机值...

更新

请参阅标记的答案,了解如何设置约束以实现我需要的布局。如果您的单元格在 tableview 的第一次加载时布局不正确,请解决这个问题:

首先,尽管 UITableViewAutomaticDimension 的名称没有记录自动 TableView 行高。只是不要实施 heightForRowAtIndexPath 并像您那样实施 estimatedheightForRowAtIndexPath

解决布局问题,不是优先级问题,而是你的约束问题。因为您的图像有固定的顶部和底部约束,所以单元格永远不会增长到大于图像 + 36pt。解决方案是使图像的顶部和底部约束 >= 而不是 =。

这样做之后,你可能会发现IB中对于不明确的约束有红色警告。这是因为大于或等于约束,布局无法确定图像视图的正确 Y 位置。解决方法:给imageView添加一个center Y in superview constraint。