Autolayout期待不同的高度

时间:2014-02-28 14:04:14

标签: ios xcode5 autolayout

我在Xcode 5上的iOS 7项目中遇到autolayout困难。假设我想显示这些按钮:

    Something
        -
        |                      10 pts fixed space from top
        -
     Button 1                  50 pts height on 4" display, reduce height if 3"5
        -
        |                      10 pts fixed space
        -
     Button 2                  50 pts height on 4" display, reduce height if 3"5

我在Interface Builder中布置我的按钮(带有故事板)。

然后我开始添加约束:

  • 从“按钮1”到“某物”的垂直间距
  • “按钮1”的容器的前导空格
  • “按钮1”的固定宽度

问题是Autolayout抱怨我的按钮,说“预期:身高= 30”。为什么?我想要一个50分的按钮,为什么这是一个问题?当然,我可以通过添加高度约束来解决这个问题,但是如果屏幕高度降低,我希望降低高度。并且,如果我运行它,即使在4“显示器上,按钮的高度设置为30,因为autolayout说它”应该“..而我甚至没有设置第二个按钮的约束,这将使它均匀差。

我怎样才能实现这样的目标?它似乎非常基本,我仍然不明白发生了什么。

请注意,我可以手动设置代码中的所有高度,但我真的想避免这种情况。

3 个答案:

答案 0 :(得分:2)

好的,我想我成功了。

这是我做的:

  • 我在故事板中设置了所有约束,使用Retina 4“外形。

  • 某事视图的约束:固定高度&宽度,固定顶部空间和前导空间。这个观点是绝对固定的。

  • 按钮1的约束:将垂直空间固定到某物视图,固定前导空格,固定宽度。 2 身高限制:30 <=身高<= 50。

  • 按钮2的约束:固定垂直空间到按钮1,固定前导空间,固定宽度。此外 2 高度限制:30&lt; = height&lt; = 50. 将底部空间固定到底部布局。

所有约束的最高优先级为1000,除了最后一个(固定底部空间到底部布局),设置为900!

这样,按钮保持高度> = 30并向上移动,但由于其他约束更为重要,因此会垂直缩小。

非常感谢@VasiliyDeych和@ P.Sami的建议。它帮助了很多。

答案 1 :(得分:1)

您需要向我们展示如何设置约束。

约束是视图必须遵循的一组规则。如果没有规则说按钮必须随父视图缩小,则不会发生。

根据您的示例,如果我理解正确,您可能需要一组这样的约束(在VFL中定义以方便):

[yourParentView addVisualConstraints:@"V:|[something(100@75)]-(10@100)-[button1(<=50,>=30@100)]-(10@100)-[button2(button1@100)]-(>=300@50)-|"
                  forViews:NSDictionaryOfVariableBindings(something,button1,button2)];

这里的所有约束都是垂直的(V :),括号中的数字表示点数,后跟@和保持该点数的所需优先级。 |符号表示超视图的顶部和底部边缘。所以] - (&gt; = 300 @ 50) - | 说,我想在button2和superview底部之间保持300或更多像素,但我优先考虑它50. button1(&lt; = 50,&gt; = 30 @ 100)表示我真的关心这个按钮的高度在30到50像素之间,优先级为100. button2 (button1)表示我希望button2与button1的高度相同。我也非常关心保持我的元素之间的10点距离。而且我有点担心某些东西(超级视图的上边缘,因此 | [)会保持在100点高。

这不适用于您打算做什么吗?

答案 2 :(得分:1)

解决垂直约束问题的方法是为 button1 button2 提供等于约束,并提供固定的垂直约束到某物视图,从第二个按钮到超级视图的底部。

所以这样你就不需要为它们中的任何一个提供一个固定的高度,它们与其他元素之间的距离(超级视图的某些部分和底部)将是标准

我希望这有帮助!