AutoLayout 上的静态间距
Static Spacing on AutoLayout
我目前正在设置一个登录屏幕,最终看起来应该是这样的:
我已经成功完成了在所有屏幕尺寸上创建所需外观所需的所有约束,但是,我似乎无法弄清楚正确对齐 "Don't have an account? Signup" 所需的约束。我将其设计为 "Don't have an account?" 是一个 UILabel,而 "Signup" 是一个 UIButton。我只是将它们并排对齐。
UILabel "Don't have an account?" 具有以下约束:
UIButton“注册”具有以下限制:
这些约束似乎可以在 4 英寸及以下的屏幕尺寸上实现它们所需的功能。但是 4.7 英寸和 5.5 英寸(不包括 iPad)在 UILabel 和 UIButton 之间有很大的间距。我读过 Ray Wenderlich 的关于自动布局的教程,但仍然无法找出问题所在(我是自动布局的新手,但我知道我在做什么。我不只是添加随机约束希望它起作用)。
这是我所有目标设备上的样子:
请注意,随着屏幕尺寸的增大,标签和按钮之间的间隙也会增大。感谢任何帮助。
您正在将标签的前导 space 设置为其父视图,并将按钮的尾随 space 设置为其父视图。所以很明显,如果 superview 变得更宽,它们就会变得更远。
所以如果这不是你想要的,请不要那样做。
您想要执行的操作的实际解决方案非常棘手。您希望这两个对象表现为一个组,并且您希望该组居中。没有简单的方法来表达这一点。您需要创建 一个群组。换句话说,您将需要一个容器视图,为该视图指定一个绝对宽度并将其居中,然后将这两个对象放入容器中。
iOS9 中的新功能,UIStackView 可以帮助您。
另一种可行的方法是使用几个 UIView 作为 spacers。有时我更喜欢这个而不是收容,但这可能是一个品味问题。
从您的 UILabel 中删除前导约束。
从您的 UIButton 中删除尾随约束。
在您的 UILabel 前面添加一个背景清晰的 UIView。设置从这个 UIView 到容器前沿的前导约束,常数为 0。设置尾随约束到 UILabel,常数为 0。
同样,在你的UIButton之后再添加一个UIView。设置从此 UIView 到 UIButton 的前导约束,常数为 0。设置从此 UIView 到容器后缘的尾部约束,常数为 0。
两个 UIView 都需要 Y 位置和高度。这些有点随意,所以我会用你的 UILabel 设置 Align Center-Y 约束,以及 5 的高度约束。
神奇之处在于:select 两个 UIView 并设置一个等宽约束。这迫使 UIViews 在两侧占据相等的 space。
UIStackView
对于这种情况来说太过分了。刚刚
- 将标签和按钮放在一个
UIView
. 中
- 将标签的左侧和中心 Y 约束到容器视图。
- 将按钮的右侧和中心 Y 约束到容器视图。
- 将标签的右边缘约束到按钮的左边缘。
- 将包含视图的水平内容拥抱优先级设置为 1000。
- 将包含视图的中心 X 约束到其 父视图。
您只需设置一些约束即可对现有代码执行此操作。这适用于所有分辨率,甚至 iPad。您不需要将它们分组,我附上了图片以显示我应用的约束。
并为按钮设置此约束
它会在所有设备上正确显示,请查看它在所有分辨率下的外观以及在每个分辨率的横向模式下的外观
谢谢
欧姆卡尔
我目前正在设置一个登录屏幕,最终看起来应该是这样的:
我已经成功完成了在所有屏幕尺寸上创建所需外观所需的所有约束,但是,我似乎无法弄清楚正确对齐 "Don't have an account? Signup" 所需的约束。我将其设计为 "Don't have an account?" 是一个 UILabel,而 "Signup" 是一个 UIButton。我只是将它们并排对齐。
UILabel "Don't have an account?" 具有以下约束:
UIButton“注册”具有以下限制:
这些约束似乎可以在 4 英寸及以下的屏幕尺寸上实现它们所需的功能。但是 4.7 英寸和 5.5 英寸(不包括 iPad)在 UILabel 和 UIButton 之间有很大的间距。我读过 Ray Wenderlich 的关于自动布局的教程,但仍然无法找出问题所在(我是自动布局的新手,但我知道我在做什么。我不只是添加随机约束希望它起作用)。
这是我所有目标设备上的样子:
请注意,随着屏幕尺寸的增大,标签和按钮之间的间隙也会增大。感谢任何帮助。
您正在将标签的前导 space 设置为其父视图,并将按钮的尾随 space 设置为其父视图。所以很明显,如果 superview 变得更宽,它们就会变得更远。
所以如果这不是你想要的,请不要那样做。
您想要执行的操作的实际解决方案非常棘手。您希望这两个对象表现为一个组,并且您希望该组居中。没有简单的方法来表达这一点。您需要创建 一个群组。换句话说,您将需要一个容器视图,为该视图指定一个绝对宽度并将其居中,然后将这两个对象放入容器中。
iOS9 中的新功能,UIStackView 可以帮助您。
另一种可行的方法是使用几个 UIView 作为 spacers。有时我更喜欢这个而不是收容,但这可能是一个品味问题。
从您的 UILabel 中删除前导约束。
从您的 UIButton 中删除尾随约束。
在您的 UILabel 前面添加一个背景清晰的 UIView。设置从这个 UIView 到容器前沿的前导约束,常数为 0。设置尾随约束到 UILabel,常数为 0。
同样,在你的UIButton之后再添加一个UIView。设置从此 UIView 到 UIButton 的前导约束,常数为 0。设置从此 UIView 到容器后缘的尾部约束,常数为 0。
两个 UIView 都需要 Y 位置和高度。这些有点随意,所以我会用你的 UILabel 设置 Align Center-Y 约束,以及 5 的高度约束。
神奇之处在于:select 两个 UIView 并设置一个等宽约束。这迫使 UIViews 在两侧占据相等的 space。
UIStackView
对于这种情况来说太过分了。刚刚
- 将标签和按钮放在一个
UIView
. 中
- 将标签的左侧和中心 Y 约束到容器视图。
- 将按钮的右侧和中心 Y 约束到容器视图。
- 将标签的右边缘约束到按钮的左边缘。
- 将包含视图的水平内容拥抱优先级设置为 1000。
- 将包含视图的中心 X 约束到其 父视图。
您只需设置一些约束即可对现有代码执行此操作。这适用于所有分辨率,甚至 iPad。您不需要将它们分组,我附上了图片以显示我应用的约束。
并为按钮设置此约束
它会在所有设备上正确显示,请查看它在所有分辨率下的外观以及在每个分辨率的横向模式下的外观
谢谢
欧姆卡尔