自动布局:某些视图为空时自动更新约束

eme*_*gro 5 ios autolayout nsautolayout

我有这样的看法

 _______________________________
|     |                         |
|  Label 0                      |
|     ^                         |
|  Label 1                      |
|     ^                         |
|  Label 2                      |
|     ^                         |
|  Label N                      |
|_______________________________|
Run Code Online (Sandbox Code Playgroud)

^代表将的顶部Label X+1与的底部链接的约束Label XLabel 0用固定常数约束到超级视图的顶部。

我要实现的目标是:如果某些内容Label X为空,则Label X+1必须取代它。

 _______________________________
|     |                         |
|  Label 0 (empty)              |
|     ^                         |
|  Label 1                      |
|     ^                         |
|  Label 2                      |
|     ^                         |
|  Label N                      |
|_______________________________|
               |
               |   The new layout
              \ /
 _______________________________
|     |                         |
|  Label 1                      |  (here it is also Label 0 but is empty)
|     ^                         |
|  Label 2                      |
|     ^                         |
|  Label N                      |
|_______________________________|
Run Code Online (Sandbox Code Playgroud)

自动布局有可能吗?还是我必须以编程方式检查空度以手动更新约束?

免责声明:请问,如果这个问题听起来很基本,请问我是从弹簧和支柱上移下来的,目前尚不成熟。

bkb*_*abs 2

当内容可见时是否需要更改?如果没有尝试这个:您可以在 viewWillAppear 方法中进行更新。对于每个标签,请调用

[firstLabel setNumberOfLines:0];
 [firstLabel setText:newProductTitleText];
 [firstLabel sizeToFit];
Run Code Online (Sandbox Code Playgroud)

将行数设置为 0 可以让标签根据需要动态使用多行。如果这是一个空标签,实际上应该变成0行。这将更新框架,自动布局应该处理其余的事情。

  • 标签的高度为 0,但标签的上边距仍保留。 (3认同)