我正在尝试将我的应用转换为使用自动布局。
这是它应该看起来的样子(在我使用自动布局之前):
现在我不确定如何使用自动布局实现以下功能:
我需要使用哪些约束来实现此目的?我还使用内容拥抱优先级吗?
我尝试将22:35标签居中,如果正确的标签是空的/不存在,这很好。但是当存在正确的标签时,这当然不能正常工作。
答案 0 :(得分:2)
将每个标签嵌入视图中,并为所有视图提供最小宽度约束为14.然后,当您标记右侧标签为空时,布局会进行调整。因此,您可以布局嵌入视图:
答案 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.此外,当然,取消隐藏它。