使用autolayout将同一垂直位置应用为同级视图

时间:2014-08-01 13:23:25

标签: ios objective-c uitableview autolayout

我正在创建一个自定义UITableViewCell,但我认为它没有任何区别 - 我的问题不言而喻。

我正在继承其中一个现有的单元格样式,并添加一个视图。超类具有视图(UILabel),可根据另一个标签中是否有内容调整其在单元格内的垂直位置。如果第二个标签中有内容,则第一个标签在第二个标签和单元格视图顶部之间垂直居中。 如果第二个标签没有任何内容,则第一个标签在单元格视图的顶部和底部之间垂直居中。

我喜欢这种行为。我正在尝试在第一个标签旁边添加第三个标签。我使用了autolayout约束来将新标签固定在第一个标签附近,如下所示:

[NSLayoutConstraint constraintsWithVisualFormat:@"[firstLabel]-(5)-[thirdLabel]" options:0 metrics:nil views:views];

这工作正常,但我无法弄清楚如何做与垂直位置类似的事情。理想情况下,我会“固定”第三个标签,使其始终与第一个标签处于同一垂直对齐状态,无论是什么,但我不知道如何用视觉格式语言表达它。

作为替代方案,弄清楚如何复制第一个标签的行为(根据第二个标签的存在或缺少来调整它的垂直对齐)。

当第二个标签 存在时,此约束可以正确地垂直对齐新标签,但如果第二个标签在该特定单元格上为空,则它不会执行任何操作:

[NSLayoutConstraint constraintsWithVisualFormat:@"V:[thirdLabel][secondLabel]" options:0 metrics:nil views:views];

如何表达此布局约束?

1 个答案:

答案 0 :(得分:2)

可视格式语言最适合用于创建一个接一个地对齐项目的约束。

对于更复杂的布局,例如您尝试构建的垂直中心对齐,您应该使用NSLayoutConstraint的{​​{1}}方法。

以下是您可以做的事情:

constraintWithItem:[...].

希望这有帮助,