首页 文章

IOS8 Autolayout具有相对宽度/高度

提问于
浏览
3

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

我添加了4个约束

  • 中心Y对齐 - 查看 - 超级视图

  • 中心X对齐 - 查看 - 超级视图

  • 等宽 - 视图 - 乘数设置为0.9的超级视图

  • 纵横比 - 视图 - 乘数设置为1:1的视图

此设置在纵向模式下工作正常,但在横向模式下失败 . (见下图)

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

人像模式
Portrait mode

风景模式 - 错误
Landscape mode - wrong

风景模式 - 样机 . 这就是我想要的 .
Landscape mode - ok

2 回答

  • 4

    这是一种方法:

    • 从上面列出的四个约束开始:中心X,中心Y,等宽(0.9乘数)和宽高比,均优先级为1000 .

    • 将等宽度的优先级更改为750.这将允许自动布局在必要时忽略或修改此约束 .

    • 添加等高度(视图 - 超级视图)约束,但不是等于,使用乘数0.9将其设为小于或等于 . 保留优先级为1000 .

    现在,当您处于肖像时,自动布局将能够通过使红色框的宽度与以前一样为90%来满足所有约束 . 切换到横向时,“等高度”约束将确保红色框不会超过高度的90%,因为此约束具有1000个优先级,但“自动布局”也会使框尽可能大,以尝试最好服务于Equal Widths约束 .

  • 1

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

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

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

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

相关问题