我正在从圆圈加载一个视图(形状为圆圈)。我想确保,圆圈的大小适应各种屏幕尺寸。到目前为止,我尝试将视图放在另一个视图中,将边距固定到superview,然后将superview的宽高比设置为1:1。这给了我一个圆圈。但是,现在,我想改变它的大小。目前,superview的大小由其中的另一个子视图指定,即标签。根据标签的内容,superview的大小会发生变化(我已将标签的字体大小设置为Autoshrink)。如果我尝试向边距约束添加常量它可以工作,但在不同的屏幕尺寸上看起来大小相同。此外,我尝试添加乘数,而乘数适用于尾部和底部边距,顶部和前导边距不会受到设置乘数的影响。下面是IB的截图(今日视图是问题中的形状)。
答案 0 :(得分:2)
你有一个良好的开端 - 对齐中心X& Y,1:1的比例。您需要添加的是两个的顶部/底部和前导/尾随约束,具有不同的优先级。下面是一个示例,它结合了您拥有的三个约束,将所有方向的视图居中,沿着较窄的轴具有10个点边界:
优先级== 750
优先级== 1000
您可能会在执行此操作时看到错误/警告,因为IB不知道如何渲染它,但是一旦完成此操作,您将拥有所需的内容。
编辑:
从记忆中,有点和像素。在可能的时候和地点,尝试用点数来思考。关于像素,你可能希望考虑的唯一时间是图像。 (可能还有其他图形测量,但同样,我是从记忆中写的。)
点数应在设备尺寸上保持一致 - 因此,如果您在4英寸iPhone屏幕上拥有100x100平方,则在12.9英寸iPad Pro上尺寸相同。
更重要的是,边距可以使用自动布局设置相同。两个屏幕上的25点差异将是相同的。因此,在上面的示例中,您将获得几乎所有设备中可能的最大矩形,因为您设置的是边距,而不是视图大小。
我去年深入研究了屏幕尺寸,这些是当前的屏幕尺寸:
//iPad Pro 1366x1024
//iPad 1024x768
//iPad Mini 1024x468
//iPhone 6 Plus 736x414
//iPhone 6 677x375
//iPhone 5 568x320
//iPhone 4 480x320
因此基于此,上述约束将在iPhone 4(iPhone SE也)上产生300x300的正方形,因为最窄的轴将减少320个两个10点的边距。在iPad Pro 12.9英寸上它将是1004x1004平方。
在代码中创建约束时,您还可以使用以下代码创建 layoutMarginGuide :
let margins = view.layoutMarginsGuide
这应该与在IB中选中“包含边距”复选框相同。基本上这是每个设备的建议边距大小。 (我相信这还应该包括状态栏,标签栏和导航栏,甚至iPhone“电话呼叫顶部横幅(原文如此)”。但是我对YMMV有一些问题。)
编辑2:
将所有这些放在一起,你通过“自动布局”定义的是一种非常流畅的方式来最大化正方形的大小(或者在你的情况下,一个正方形变成一个圆形)。通过设置两组边距,一组等于但具有高优先级,您可以让自动布局知道它可能会超出所需的约束。 大于或等于值的第二个集合是 required 。
因此,在480x320设备中,可以破坏无法满足的顶部/底部边界约束(“等于”),并且在横向上将破坏不能满足的前导/尾随约束。请记住,您已经设置了中心X / Y,因此视图将居中,并设置1:1的比例,使其为正方形。 (只要你没有触及优先级 - 默认是必需的。