我需要使用单个UIControl自动布局故事板UIView . UIControl应该居中,需要具有1:1的宽高比,并且应始终使用90%的超视图宽度或高度,具体取决于设备方向而不剪裁 .
我添加了4个约束
-
中心Y对齐 - 查看 - 超级视图
-
中心X对齐 - 查看 - 超级视图
-
等宽 - 视图 - 乘数设置为0.9的超级视图
-
纵横比 - 视图 - 乘数设置为1:1的视图
此设置在纵向模式下工作正常,但在横向模式下失败 . (见下图)
我需要什么样的约束才能解决这个问题 . 如果旋转设备,是否必须更改约束?
人像模式
风景模式 - 错误
风景模式 - 样机 . 这就是我想要的 .
2 回答
这是一种方法:
从上面列出的四个约束开始:中心X,中心Y,等宽(0.9乘数)和宽高比,均优先级为1000 .
将等宽度的优先级更改为750.这将允许自动布局在必要时忽略或修改此约束 .
添加等高度(视图 - 超级视图)约束,但不是等于,使用乘数0.9将其设为小于或等于 . 保留优先级为1000 .
现在,当您处于肖像时,自动布局将能够通过使红色框的宽度与以前一样为90%来满足所有约束 . 切换到横向时,“等高度”约束将确保红色框不会超过高度的90%,因为此约束具有1000个优先级,但“自动布局”也会使框尽可能大,以尝试最好服务于Equal Widths约束 .
您强制使用视图宽度和宽高比 . 因此,当您的宽度增长时,autolayout将强制您的身高也增长,以保持1:1的宽高比 . 你必须:
将高度和宽度的约束设置为
<= 0.9* Superview
,优先级为1000将高度和宽度的约束设置为
== 0.9* Superview
,优先级为750我没试过,但看起来应该更好;)