1

主要问题:我有三个标签(label1、label2、label3),一个在另一个之下。如果在运行时将 label2 设置为隐藏或从超级视图中删除,我如何将 label3 对齐到 label1 下方。

初始视图:

Label1
vertical spacing 
Label2
vertical spacing 
Label3

行动:

set Label2.hidden = yes;

输出:

Label1
vertical spacing
Label3

我尝试的是应用垂直间距约束:

  1. 在 label1 和 label2 之间具有一定的优先级
  2. 在 label2 和 label3 之间,对第三个约束具有高优先级
  3. 在 label1 和 label3 之间,优先级最低

现在,当我删除 label2 时,如何刷新约束,或者我应该跟踪所有约束并在 label2 隐藏时删除第二个约束?

4

2 回答 2

1

一种解决方案是更改 label2 上的高度约束,使其为零,然后刷新约束,使所有内容都向上移动。您必须创建该变量的属性并将其设置为+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

几个提示:

  • 确保从标签而不是标签的超级视图中删除、更改和重新添加约束。
  • 您可以将所有相同的值用于新约束的现有约束,当然,常量为 0 除外。

祝你好运!

于 2013-06-20T14:08:47.447 回答
0

为什么不把 label3 的 frame 设置为 hidden 就等于 label2 呢?

所以在Label3.frame = Label2.frame;后面加上Label2.hidden = YES;,反之亦然。

于 2013-06-20T14:02:23.443 回答