Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自动布局-根据其他标签调整标签Y位置';它上面的动态高度是多少_Ios_Autolayout_Xcode9_Swift3.2 - Fatal编程技术网

Ios 自动布局-根据其他标签调整标签Y位置';它上面的动态高度是多少

Ios 自动布局-根据其他标签调整标签Y位置';它上面的动态高度是多少,ios,autolayout,xcode9,swift3.2,Ios,Autolayout,Xcode9,Swift3.2,我有两个标签。标签A和标签B如下所示 当标签A高度为零时,我想将标签B向上移动,使其上边距为superview=20pt 如果标签A高度>0,则标签B Y位置= 标签A上边距+标签A高度+标签A和B之间的垂直间距(即标签A底部+垂直间距B/w标签A和B=标签B Y位置) 是否可以使用autolayout进行此操作?您可以将LabelA.height>0大小写的所有约束链接到NSLayoutConstraint iOutletCollection @property(强,非原子)IBOutle

我有两个标签。标签A和标签B如下所示

当标签A高度为零时,我想将标签B向上移动,使其上边距为superview=20pt

如果标签A高度>0,则标签B Y位置= 标签A上边距+标签A高度+标签A和B之间的垂直间距(即标签A底部+垂直间距B/w标签A和B=标签B Y位置)
是否可以使用autolayout进行此操作?

您可以将LabelA.height>0大小写的所有约束链接到NSLayoutConstraint iOutletCollection

@property(强,非原子)IBOutletCollection(NSLayoutConstraint)*labelAScenarioConstraints

对于LabelA.height=0的情况也一样,如

@属性(强,非原子)iOutletCollection(NSLayoutConstraint)*labelAWithoutHeightScenarioConstraints

当你想改变它时,只需做如下操作:

for (NSLayoutConstraint *constraint in labelAScenarioConstraints) {
    [constraint setActive:labelA.frame.size.height > 0];
}
for (NSLayoutConstraint *constraint in labelAWithoutHeightScenarioConstraints) {
    [constraint setActive:labelA.frame.size.height == 0];
}
您可以通过更改此属性来激活或停用约束…激活或停用约束会在视图上调用addConstraint:和removeConstraint:,该视图是此约束管理的项的最接近的公共祖先。使用此属性,而不是直接调用addConstraint:或removeConstraint:


请记住,所有UI更新都应该从主线程完成。如果要设置约束更改的动画,可以将代码放入UIView animateWithDurationanimations块中。

问题在哪里。。没有人知道您要调整哪个标签-假设A是动态的,而您希望B向下移动。。使标签A具有
contentHuggingPriority
.required
contentCompressionResistancePriority
.required
。。然后,顶部标签将调整自身大小以适合,另一个将相应地移动。我想在标签A高度为零时向上移动标签B。如果标签A高度为零,我想删除垂直间距。请使用轴设置为垂直的
UIStackView
。使用20的间距、对齐填充、分布填充。现在,您必须调整拥抱优先级->为需要比其他标签增长更多的标签设置较低的值。每当您需要将标签A的高度设置为
0
,您只需要将该标签的
hidden
属性设置为
true