具有相对宽度/高度的IOS8 Autolayout

时间:2015-05-25 13:11:01

标签: ios8 storyboard autolayout constraints orientation

我需要使用单个UIControl自动布局故事板UIView。 UIControl应该居中,需要具有1:1的宽高比,并且应始终使用90%的超视图宽度或高度,具体取决于设备方向而不剪裁。

我添加了4个约束

  1. 中心Y对齐 - 查看 - Superview
  2. 中心X对齐 - 查看 - Superview
  3. 等宽度 - 视图 - 乘数设置为0.9的超级视图
  4. 宽高比 - 视图 - 乘数设置为1:1的视图
  5. 此设置在纵向模式下工作正常,但在横向模式下失败。 (见下图)

    我需要什么样的约束才能解决这个问题。如果旋转设备,是否必须更改约束?

    人像模式 Portrait mode

    横向模式 - 错误 Landscape mode - wrong

    横向模式 - 样机。这就是我想要的。 Landscape mode - ok

2 个答案:

答案 0 :(得分:4)

这是一种方法:

  1. 从上面列出的四个约束开始:中心X,中心Y,等宽(0.9乘数)和宽高比,均优先级为1000.
  2. 将等宽度的优先级更改为750.这将允许自动布局在必要时忽略或修改此约束。
  3. 添加等高度(视图 - 超级视图)约束,但不是等于,使用乘数0.9将其设为小于或等于。保留优先级为1000。
  4. 现在,当您处于人像状态时,自动布局将能够通过使红色框的宽度与之前一样为90%来满足所有约束。切换到横向时,“等高度”约束将确保红色框不会超过高度的90%,因为此约束具有1000个优先级,但“自动布局”也会使框尽可能大,以尝试最好服务于Equal Widths约束。

答案 1 :(得分:1)

您强制使用视图宽度和宽高比。因此,当您的宽度增长时,autolayout将强制您的身高也增长,以保持1:1的宽高比。 你必须:

  • 将高度和宽度的约束设置为<= 0.9* Superview,优先级为1000
  • 将高度和宽度的约束设置为== 0.9* Superview,优先级为750

我没有尝试过,但它应该看起来更好;)