自动布局中按钮之间的宽度相等且间距相等

时间:2014-10-04 12:11:53

标签: ios iphone cocoa-touch interface-builder autolayout

我尝试使用自动布局约束来自动调整视图中几个类似大小的按钮,以产生以下效果:

调整大小之前

Before stretching

调整大小后的预期效果

After stretching

正如你所知,我希望按钮的大小相同,我也希望每个按钮之间的间距为20分。起初看起来很简单,所以我设置了以下约束:

  • 按钮:左邻居的空间= 20(包括最左侧和最右侧的按钮)
  • 按钮:右邻居的空间= 20(包括最左侧和最右侧的按钮)
  • 按钮:相同宽度

调整大小后实际发生的事情

enter image description here

在预览中或在我的iPhone /模拟器中测试运行应用程序时,按钮会调整大小并且甚至不会遵循我为其设置的相同宽度约束。实际上,包含视图的视图也会调整大小以适应新的按钮大小。任何人都知道如何在界面构建器中解决这个问题?

4 个答案:

答案 0 :(得分:15)

设置:
- 所有按钮的相等宽度
- 所有按钮之间的水平间距
- 领先以超级查看第一个按钮,尾随以超级视图查看最后一个按钮
应该做的工作。除非您遇到superview问题(例如ScrollView缺少约束)

答案 1 :(得分:6)

在界面构建器中,您可以像上面所述设置按钮之间的间距约束。然后你可以命令选择所有这些并指定" Equal Width"约束以应用于所选对象。

答案 2 :(得分:4)

最后我遗忘了如何解决这个问题。我测试它就像魅力一样。

  1. 为具有20个单位边距的空间项目添加约束
  2. 为年龄添加约束
  3. 现在很棘手
    • 为每个项目添加约束宽度等于父级
    • 选择所有这些新约束并更改其属性
    • 将乘数设置为值1:5
    • 将常量设置为-24(项目之间的间隔为6,父边缘为120,此乘以乘数值1:5得出24
    • 更新项目框架
  4. 那就是它!下图显示了它在界面构建器中的工作原理:

    cannot set the content of a TextureView

    将模拟尺寸设置为"自由形式"并测试不同的宽度(我将其设置为330)。

答案 3 :(得分:3)

这个问题似乎是因为content hugging prioritycontent compression Resistance priority错误。因此,您应将它们设置为低内容拥抱和高抗压性(所有应具有相同的值)。

因为内容拥抱是抵抗视图增长和内容压缩的属性阻力优先是抵抗视图缩小。有关这些的更多信息,您可以找到Question