如何具有动态值的等值水平约束
How to have equal value horizontal constraints with dynamic value
我有 3 个水平排列的项目(值是示例而非实际值):
<----100p----> LABEL <-3p-> IMAGE <-3p-> LABEL <----100p---->
我需要两个 100p 约束始终彼此相等,但该值可以小于或等于 100p。标签和图像之间的 3p 约束必须始终为 3p。例如,在较小的设备上,两个 100p 约束可能会分别降至 50p,以保持整个结构在较小屏幕上居中,同时保持标签和图像的大小以及 3p 约束。
如何根据这些要求设计约束?我一直 运行 遇到一个问题,即三个元素在不同的设备上偏离中心,因为我无法获得两个相等但从视图到标签的缩放约束。
变得简单:我需要两个标签始终与视图等距(值无关紧要),同时还保持标签和图像的 3p 约束和 size/scale。
编辑:
如果我尝试使标签的宽度保持相等,那么在较小的屏幕上,标签文本无法容纳在其宽度内
将标签和图像放在水平堆栈视图中。
- 您可以在当前状态下通过按住键盘上的 Command 并单击每个视图来执行此操作。一旦它们全部突出显示,请通过顶部菜单转到
Editor > Embed In > Stack View
。
- 添加约束以在其父视图(主视图?)中将堆栈视图居中。
- 将堆栈视图
Distribution
设置为 Fill
,并将 Spacing
设置为 3
(对于您的 3p 间距)。
- 在两个标签之间设置等宽约束,使它们始终保持相同的宽度。
- 在每个标签上转到
Size Inspector
并将它们的 Horizontal Compression Resistance Priority
设置为 1000(必需),这样它们就不会被压成不显示所有文本。如果图像被压扁,您可能也需要对图像执行此操作。或者,您可以在图像上设置最小宽度限制或固定宽度限制(请参阅下一步)。
决定如何处理图像宽度。
- 选项 1:不对任何标签或图像设置固定宽度限制,将图像的
Horizontal Content Hugging Priority
设置为高于或低于标签的 Horizontal Content Hugging Priority
以确定图像是否将拉伸以填充堆栈视图,或者标签将拉伸以填充堆栈视图。
- 选项 2:在图像或标签上设置固定约束,使它们保持您想要的宽度,并让另一个视图(没有固定宽度约束)拉伸以填充。
在stack view和它的super view(主视图,或者safe area,任何你需要的)之间添加一个等宽约束并且设置约束的Priority
(在选择约束的 Size Inspector
到 750(小于 1000)和 Constant
到 -200.
- 常量 -200 表示您希望堆栈视图的宽度比主视图的宽度小 200(每边 100,如您所愿)。
- 优先级小于
1000 (Required)
意味着如果需要满足您定义的其他更高优先级要求,可以打破此约束。如果需要,在较小的屏幕上,这将允许每侧 100 的间距缩小到较低的值。
我提出了一个新的故事板,并在各种尺寸的屏幕上亲自对其进行了测试,它对我很有效。有几个变量我不确定,比如你想如何处理标签宽度和图像宽度,但我无法对帖子发表评论。
我有 3 个水平排列的项目(值是示例而非实际值):
<----100p----> LABEL <-3p-> IMAGE <-3p-> LABEL <----100p---->
我需要两个 100p 约束始终彼此相等,但该值可以小于或等于 100p。标签和图像之间的 3p 约束必须始终为 3p。例如,在较小的设备上,两个 100p 约束可能会分别降至 50p,以保持整个结构在较小屏幕上居中,同时保持标签和图像的大小以及 3p 约束。
如何根据这些要求设计约束?我一直 运行 遇到一个问题,即三个元素在不同的设备上偏离中心,因为我无法获得两个相等但从视图到标签的缩放约束。
变得简单:我需要两个标签始终与视图等距(值无关紧要),同时还保持标签和图像的 3p 约束和 size/scale。
编辑:
如果我尝试使标签的宽度保持相等,那么在较小的屏幕上,标签文本无法容纳在其宽度内
将标签和图像放在水平堆栈视图中。
- 您可以在当前状态下通过按住键盘上的 Command 并单击每个视图来执行此操作。一旦它们全部突出显示,请通过顶部菜单转到
Editor > Embed In > Stack View
。
- 您可以在当前状态下通过按住键盘上的 Command 并单击每个视图来执行此操作。一旦它们全部突出显示,请通过顶部菜单转到
- 添加约束以在其父视图(主视图?)中将堆栈视图居中。
- 将堆栈视图
Distribution
设置为Fill
,并将Spacing
设置为3
(对于您的 3p 间距)。 - 在两个标签之间设置等宽约束,使它们始终保持相同的宽度。
- 在每个标签上转到
Size Inspector
并将它们的Horizontal Compression Resistance Priority
设置为 1000(必需),这样它们就不会被压成不显示所有文本。如果图像被压扁,您可能也需要对图像执行此操作。或者,您可以在图像上设置最小宽度限制或固定宽度限制(请参阅下一步)。 决定如何处理图像宽度。
- 选项 1:不对任何标签或图像设置固定宽度限制,将图像的
Horizontal Content Hugging Priority
设置为高于或低于标签的Horizontal Content Hugging Priority
以确定图像是否将拉伸以填充堆栈视图,或者标签将拉伸以填充堆栈视图。 - 选项 2:在图像或标签上设置固定约束,使它们保持您想要的宽度,并让另一个视图(没有固定宽度约束)拉伸以填充。
- 选项 1:不对任何标签或图像设置固定宽度限制,将图像的
在stack view和它的super view(主视图,或者safe area,任何你需要的)之间添加一个等宽约束并且设置约束的
Priority
(在选择约束的Size Inspector
到 750(小于 1000)和Constant
到 -200.- 常量 -200 表示您希望堆栈视图的宽度比主视图的宽度小 200(每边 100,如您所愿)。
- 优先级小于
1000 (Required)
意味着如果需要满足您定义的其他更高优先级要求,可以打破此约束。如果需要,在较小的屏幕上,这将允许每侧 100 的间距缩小到较低的值。
我提出了一个新的故事板,并在各种尺寸的屏幕上亲自对其进行了测试,它对我很有效。有几个变量我不确定,比如你想如何处理标签宽度和图像宽度,但我无法对帖子发表评论。