自动布局将两个标签对齐

时间:2014-09-13 12:52:29

标签: ios xcode autolayout

我正在尝试将我的应用转换为使用自动布局。

这是它应该看起来的样子(在我使用自动布局之前): enter image description here

现在我不确定如何使用自动布局实现以下功能:

  1. 左侧文字标签(其中22:35)必须在水平方向 当没有正确的标签时,KL1032标签的中心(带有 -14分钟)。
  2. 如果实际存在正确的标签,那么右边缘 22:35标签应与KL1032的水平中心对齐 标签和-14分钟标签的左边缘也应该对齐 KL1032标签的水平中心,留有一点空间 标签之间就像屏幕截图一样。
  3. 我需要使用哪些约束来实现此目的?我还使用内容拥抱优先级吗?

    我尝试将22:35标签居中,如果正确的标签是空的/不存在,这很好。但是当存在正确的标签时,这当然不能正常工作。

2 个答案:

答案 0 :(得分:2)

将每个标签嵌入视图中,并为所有视图提供最小宽度约束为14.然后,当您标记右侧标签为空时,布局会进行调整。因此,您可以布局嵌入视图:

screenshot 1

答案 1 :(得分:1)

您将不得不添加和删除“( - 14分钟)”标签,而不是隐藏它或将其设置为空。

将22:35标签设置为使其水平中心与KL1032标签的水平中心对齐,但优先级略低(例如750)。同时设置一个约束,使后缘大于或等于KL1032标签的中心减去您想要的任何微小间距。这个应该是优先级1000(必需)。

当存在“( - 14分钟)”标签时,添加它并在其上设置约束。将其前缘限制为22:35标签的后缘加上您想要的间距。还要创建约束以使其中心与KL1032标签的中心对齐,但将其优先级设置在必需(1000)和以22:35标签为中心的约束之间,例如800.布局系统将无法以它为中心因为这会强制22:35标签超过其所需的约束,但它会尽可能接近它。

当该标签不存在时,只需将其从层次结构中删除,这也将删除其约束。 22:35标签将回到中心位置(因为它可以并且“更喜欢”)。

如果您愿意,可以在NIB中进行布局,同时显示两个标签。设置“( - 14分钟)”标签的出口以及它的限制。将它们设为strong,因为您将暂时从层次结构中删除它们,但不希望它们被释放。这样,您的代码可以根据需要删除并重新添加它们,而无需在代码中表达约束。


编辑:哦,您需要一个约束,将“( - 14分钟)”标签的基线设置为等于22:35标签的基线。你必须每次在代码中添加它或在NIB中设置一个强大的插座并每次重新添加它,就像其他的一样。


编辑2:我遇到了另一种方法。您可以在层次结构中保留“( - 14分钟)”视图,并始终将所有约束保留在原位。如果您不希望它显示,请将视图设置为隐藏,并将其中心与KL1032标签中心之间的约束constant设置为更大的值。绝对足够大,允许22:35标签采取其中心的首选位置,可能大到足以远离屏幕。

由于您不希望22:35标签一直跟随它,因此建立这两个标签之间间距的约束应该是“大于或等于”而不是“相等”。此更改不取决于是否显示“( - 14分钟)”标签。这就是这种约束应该如何。

如果您希望显示“( - 14分钟)”标签,请重置试图将其居中的约束,使constant等于0.此外,当然,取消隐藏它。