Ios 自动布局上的静态间距

Ios 自动布局上的静态间距,ios,swift,autolayout,ios-autolayout,Ios,Swift,Autolayout,Ios Autolayout,我目前正在设置一个登录屏幕,最终看起来应该是这样的: 我已经成功地完成了在所有屏幕大小上创建所需外观所需的所有约束,但是,我似乎无法理解正确对齐“没有帐户?注册”所需的约束。我设计它的目的是让“没有帐户”是一个UILabel,“注册”是一个UIButton。我刚刚把这些并排排列好 UILabel“没有帐户吗?”,具有以下约束: UIButton“注册”具有以下约束: 这些约束条件似乎可以满足4英寸及以下屏幕尺寸的要求。但是,4.7英寸和5.5英寸(不包括iPad)的UILabel和UIBu

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

我已经成功地完成了在所有屏幕大小上创建所需外观所需的所有约束,但是,我似乎无法理解正确对齐“没有帐户?注册”所需的约束。我设计它的目的是让“没有帐户”是一个UILabel,“注册”是一个UIButton。我刚刚把这些并排排列好

UILabel“没有帐户吗?”,具有以下约束:

UIButton“注册”具有以下约束:

这些约束条件似乎可以满足4英寸及以下屏幕尺寸的要求。但是,4.7英寸和5.5英寸(不包括iPad)的UILabel和UIButton之间的间距较大。我读过Ray Wenderlich关于自动布局的教程,但仍然无法解决这个问题(我对自动布局是新手,但我知道我在做什么。我不只是添加随机约束,希望它能工作)

这是我的所有目标设备上的外观:


请注意,随着屏幕尺寸的增大,标签和按钮之间的间隙也随之增大。非常感谢您的帮助。

您正在将标签的前导空间设置为其superview,并将按钮的尾随空间设置为其superview。因此,很明显,如果superview变得更宽,它们之间的距离会更大

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

你想要做的事情的实际解决方案是相当棘手的。您希望这两个对象表现为一个组,并且希望该组居中。没有简单的方式来表达这一点。你需要组成一个小组。换句话说,您将需要一个容器视图,给该视图一个绝对宽度并使其居中,然后将这两个对象放在容器内


iOS 9中新增了一个UIStackView,它可以帮助您实现这一点。

另一种有效的方法是使用两个UIView作为间隔。有时我更喜欢这种方式,而不是遏制,但这可能是一个品味的问题

  • 从UILabel中删除前导约束

  • 从UIButton中删除尾部约束

  • 在UILabel前面添加背景清晰的UIView。使用常量0将此UIView的前导约束设置为容器前导边。使用常量0为UILabel设置尾部约束

  • 同样,在UIView按钮后添加另一个UIView。使用常量0将此UIView的前导约束设置为UIButton。使用常量0将此UIView的尾部约束设置为容器后缘

  • 两个UIView都需要Y位置和高度。这些都是任意的,所以我会将“对齐中心Y”约束设置为UILabel,高度约束设置为5

  • 这里是魔术发生的地方:选择两个UIView并设置一个相等的宽度约束。这迫使UIView在两侧占据相等的空间


  • UIStackView
    对于这种情况来说太过分了。只是

  • 将标签和按钮放在一个
    ui视图中
  • 将标签的左侧和中心Y约束到容器视图
  • 将按钮的右侧和中心Y约束到容器视图
  • 将标签的右边缘约束到按钮的左边缘
  • 将包含视图的水平内容包含优先级设置为1000
  • 将包含视图的中心X约束到其superview

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

    对于按钮,设置此约束

    它将被正确地显示在所有设备上,以查看它在所有分辨率上以及在每个分辨率的横向模式下的外观

    谢谢


    Omkar

    谢谢,这很有道理。这就是我害怕的,谢谢你让我知道。我可能会尝试在容器视图中对它们进行“分组”,因为我需要支持以前的版本。感谢您的回复,谢谢!不客气。问得很好的问题;很好的屏幕截图。约束问题很难问(因为它们很难描述);你做得很好。这就是我最后所做的(类似于matt最初建议将对象嵌入容器视图)。谢谢你的帮助!:)这就是我的教授最初教我们如何使用间隔视图。我认为这是一个糟糕的做法(只是觉得奇怪,有这么多的观点,只是填充),但这只是我的一个假设。很高兴知道不是这样。