Xcode 6 - iOS8 - 自动布局如何正确设置约束优先级

时间:2015-07-14 07:48:49

标签: ios xcode autolayout constraints

我尝试使用自动布局来动态调整我的UITableViewCell高度。对于基本的单元格设计,比如行中的标签,我设法实现了我想要的。但我不能让它适用于以下方面:

设置

  • 我使用针对iOS8及以上版本的Swift和Xcode 6.4。
  • TableView行高设置为UITableViewAutomaticDimension。
  • TableView的估计高度设置为100,通常应该接近最终高度。
  • 标题的垂直拥抱优先级设置为低(250)。
  • 没有改变其他元素拥抱和压缩优先级。

这是原型单元格:

Prototype cell

左侧的图像具有固定的高度。标题文本应该增长到适合整个文本。它是一个行设置为0的标签。副标题不应该增长,因为它只是短文本。

我的约束设置

  • 将图像前导和上限约束设置为18.将标题和字幕标签的尾随约束设置为18.底部约束设置为18,优先级较低(249)。
  • 对于标题标签顶部和尾部约束,将superview设置为18.对图像的主要约束18.副标题的底部约束为0.
  • 对于字幕标签,对标题标签的顶部约束为0.对superview的尾随空间为18.对图像的前导约束为18.对superview的底部约束为18,优先级较低(250)。

问题

无论如何,我希望superview的底部空间为18个单位。这意味着,如果文字的标题(标题+副标题)高度小于图像的高度。图像的底部约束应确保18个单位底部边距。如果标题的高度增加且总文本高于图像,则字幕的底部约束应确保18个单位底部边距,并且应忽略图像的底部约束。

我感谢任何建议如何解决这个问题,因为我在某个方面,我只是在一些随机值中加入约束......

更新

请参阅标记的答案,了解如何设置约束以实现我需要的布局。如果您的单元格在tableview的第一次加载时没有正确布局,请提出此问题以获得解决方法:iOS 8 Auto height cell not correct height at first load

1 个答案:

答案 0 :(得分:2)

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

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

执行此操作后,您可能会发现IB中存在不明确约束的红色警告。这是因为在大于或等于约束的情况下,布局不能确定图像视图的正确Y位置。解决方案:在superview约束中添加一个中心Y到imageView。

相关问题