如何具有动态值的等值水平约束

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。

编辑:

如果我尝试使标签的宽度保持相等,那么在较小的屏幕上,标签文本无法容纳在其宽度内

  1. 将标签和图像放在水平堆栈视图中。

    • 您可以在当前状态下通过按住键盘上的 Command 并单击每个视图来执行此操作。一旦它们全部突出显示,请通过顶部菜单转到 Editor > Embed In > Stack View
  2. 添加约束以在其父视图(主视图?)中将堆栈视图居中。
  3. 将堆栈视图 Distribution 设置为 Fill,并将 Spacing 设置为 3(对于您的 3p 间距)。
  4. 在两个标签之间设置等宽约束,使它们始终保持相同的宽度。
  5. 在每个标签上转到 Size Inspector 并将它们的 Horizontal Compression Resistance Priority 设置为 1000(必需),这样它们就不会被压成不显示所有文本。如果图像被压扁,您可能也需要对图像执行此操作。或者,您可以在图像上设置最小宽度限制或固定宽度限制(请参阅下一步)。
  6. 决定如何处理图像宽度。

    • 选项 1:不对任何标签或图像设置固定宽度限制,将图像的 Horizontal Content Hugging Priority 设置为高于或低于标签的 Horizontal Content Hugging Priority 以确定图像是否将拉伸以填充堆栈视图,或者标签将拉伸以填充堆栈视图。
    • 选项 2:在图像或标签上设置固定约束,使它们保持您想要的宽度,并让另一个视图(没有固定宽度约束)拉伸以填充。
  7. 在stack view和它的super view(主视图,或者safe area,任何你需要的)之间添加一个等宽约束并且设置约束的Priority(在选择约束的 Size Inspector 到 750(小于 1000)和 Constant 到 -200.

    • 常量 -200 表示您希望堆栈视图的宽度比主视图的宽度小 200(每边 100,如您所愿)。
    • 优先级小于 1000 (Required) 意味着如果需要满足您定义的其他更高优先级要求,可以打破此约束。如果需要,在较小的屏幕上,这将允许每侧 100 的间距缩小到较低的值。

我提出了一个新的故事板,并在各种尺寸的屏幕上亲自对其进行了测试,它对我很有效。有几个变量我不确定,比如你想如何处理标签宽度和图像宽度,但我无法对帖子发表评论。