AutoLayout上的静态间距

时间:2015-10-14 02:36:36

标签: ios swift autolayout ios-autolayout

我目前正在设置一个最终应该是这样的登录屏幕:

enter image description here

我已经成功完成了在所有屏幕尺寸上创建所需外观所需的所有约束,但是,我似乎无法弄清楚正确对齐“没有帐户?注册”所需的约束。我把它设计成“没有帐户?”是UILabel,“注册”是UIButton。我刚刚将这些并排排列。

UILabel,“没有帐户?”,有以下限制: enter image description here

UIButton,“注册,有以下限制:

enter image description here

这些约束似乎可以实现4英寸及以下屏幕尺寸所需的尺寸。但是4.7英寸和5.5英寸(不包括iPad)在UILabel和UIButton之间有很大的间距。我读过Ray Wenderlich的教程自动布局,仍然无法弄清楚问题(我是新手自动布局,但我知道我在做什么。我不只是添加随机约束,希望它有效)。

这就是我所有目标设备上的样子:

enter image description here

请注意,随着屏幕尺寸的增加,标签和按钮之间的间隙也会增加。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:3)

您正在将标签的前导空格设置为其超级视图,并且您正在将按钮的尾随空格设置为其超级视图。很明显,如果超级视图变宽,它们将会进一步分开。

所以,如果那不是你想要的,那就不要这样做。

您想要做的事情的实际解决方案非常棘手。您希望这两个对象表现为一个组,并且您希望该组居中。没有简单的方法来表达这一点。您需要制作一个群组。换句话说,您将需要一个容器视图,为该视图提供绝对宽度并使其居中,并将这两个对象放在容器中。

iOS 9中的新功能,UIStackView可以为您提供帮助。

答案 1 :(得分:1)

另一种方法是使用几个UIViews作为间隔物。我有时更喜欢这种遏制,但这可能是一种品味问题。

  1. 从UILabel中删除前导约束。

  2. 从UIButton中删除尾随约束。

  3. 在UILabel前添加一个背景清晰的UIView。将此UIView中的前导约束设置为常量为0的容器前沿。将常量约束设置为UILabel,常量为0.

  4. 同样,在UIButton之后添加另一个UIView。将此UIView中的前导约束设置为常量为0的UIButton。将此UIView的尾随约束设置为常量为0的容器后端。

  5. 两个UIView都需要Y位置和高度。这些在某种程度上是任意的,所以我会用你的UILabel设置Align Center-Y约束,并设置5的高度限制。

  6. 这里发生了魔法:选择两个UIViews并设置Equal Widths约束。这迫使UIViews在两侧占据相同的空间。

答案 2 :(得分:1)

UIStackView对于这种情况来说太过分了。刚

  1. 将标签和按钮放在一个UIView
  2. 将标签的左侧和中心Y限制在容器视图中。
  3. 将按钮的右侧和中心Y限制在容器视图中。
  4. 将标签的右边缘限制在按钮的左边缘。
  5. 将包含视图的水平内容拥抱优先级设置为1000。
  6. 将包含视图的中心X限制为超级视图。

答案 3 :(得分:0)

您只能通过设置一些约束来对现有代码执行此操作。即使在iPad上,这也适用于所有分辨率。您不需要对它们进行分组,我已附加图像以显示我已应用的约束。

enter image description here

并为按钮设置此约束 enter image description here

它会在所有设备上正确显示,看看它在所有分辨率上的外观以及每种分辨率的横向模式

enter image description here

enter image description here

enter image description here

enter image description here

由于

OMKAR