具有两个不等式约束的歧义

Posted

技术标签:

【中文标题】具有两个不等式约束的歧义【英文标题】:Ambiguity with two inequality constraints 【发布时间】:2013-11-20 04:37:59 【问题描述】:

我希望底视图距离图像其上方的标签至少 20 距离。标签是多行的,因此它可以比图像视图更高或更短,具体取决于有多少文本。当我添加两个“到最近邻的距离 >= 20”的约束(如屏幕截图所示)时,Xcode 告诉我约束不明确。

我该如何解决?

【问题讨论】:

您希望标签如何与图像视图对齐?如果是单行,是否应该与顶部对齐?底端?中间?随着它变得更高,您是否希望顶部对齐,直到它太高而无法与底部视图保持 20 距离,然后再向上移动?您可以设想多种场景,它们都需要不同的解决方案。你应该更明确地说明你想要什么。 @rdelmar 它们没有相对于彼此垂直对齐(此标签上方还有另一个标签,并且图像和顶部标签都与超级视图顶部边框对齐)。实际上,它们的顶部对齐,底部各不相同。 那么,如果标签太长,你是想让底视图变短,还是往下移?另外,图像视图是否有固定高度? @rdelmar 底视图被下推,图像是固定高度。 【参考方案1】:

如果我了解您的要求,我认为您可以这样做:

图像视图具有固定的宽度和高度,以及对左侧和顶部的约束,以及对底部视图的约束 =20优先级为 700。这很关键——这将设置该底部视图的 y 位置(其具有固定的高度和两侧的约束),但如果另一个具有更高优先级的约束使其移动,它将允许它移动得更低。具有更高优先级的约束是对标签的约束——它 >=20,优先级为 1000(标签还对图像视图的顶部、右侧和后缘有约束)。

【讨论】:

这实际上是我现在所拥有的。事实证明,有两个 >=20 约束是一个红鲱鱼。如果我删除其中任何一个,仍然存在歧义。 Xcode 帮助(单击警告中的(i))告诉我,仅>= 约束不足以垂直定位元素。 @AlexB,我在图像视图和底部视图之间的那个是 =(优先级为 700)而不是 >=。这足以满足约束。 所以看起来>=20 并不意味着“缩小到20”。您还必须在相同距离上设置=20 约束,但优先级较低。 @AlexB,是的,这是真的。 >=20 可能是一百万,所以这是模棱两可的。 酷,看起来使图像约束=20 而不是 >=20 有效。在答案中澄清这一点,我会接受(也不确定 30 是从哪里来的,你的意思是 20 吗?)

以上是关于具有两个不等式约束的歧义的主要内容,如果未能解决你的问题,请参考以下文章

具有相等和不等式的回归约束了R中的系数

不等式约束问题

差分约束+模板

学习差分约束

差分约束系统

拉格朗日乘法与KKT条件