Swift 来自XIB的视图的自动布局约束
我正在从一个圆加载一个视图(形成一个圆)。我想确定的是,圆圈的大小可以适应不同的屏幕大小。到目前为止,我尝试将视图放置在另一个视图中,将边距固定到superview,然后将superview的纵横比设置为1:1。这给了我一个圆圈。然而,现在,我想改变它的大小。当前,superview的大小由其中的另一个子视图(标签)指定。根据标签的内容,superview的大小会发生变化(我已将标签的字体大小设置为自动收缩)。如果我尝试在边距约束中添加一个常量,它会起作用,但在不同的屏幕大小中看起来大小相同。此外,我还尝试添加了一个乘数,虽然乘数适用于尾随页边距和底部页边距,但设置乘数不会影响顶部页边距和前导页边距。下面是IB的屏幕截图(今天的视图是问题中的形状)。Swift 来自XIB的视图的自动布局约束,swift,xcode,io,autolayout,interface-builder,Swift,Xcode,Io,Autolayout,Interface Builder,我正在从一个圆加载一个视图(形成一个圆)。我想确定的是,圆圈的大小可以适应不同的屏幕大小。到目前为止,我尝试将视图放置在另一个视图中,将边距固定到superview,然后将superview的纵横比设置为1:1。这给了我一个圆圈。然而,现在,我想改变它的大小。当前,superview的大小由其中的另一个子视图(标签)指定。根据标签的内容,superview的大小会发生变化(我已将标签的字体大小设置为自动收缩)。如果我尝试在边距约束中添加一个常量,它会起作用,但在不同的屏幕大小中看起来大小相同。此
您有了一个良好的开端-以1:1的比例对齐X和Y中心。您只需添加两组具有不同优先级的上/下和前导/尾随约束。下面是一个示例,它与您拥有的三个约束相结合,将使视图在所有方向上居中,并沿较窄的轴设置10点边界: 优先级==750
- Top=10分
- 底部=10分
- 领先=10分
- 尾随==10分
- 顶部>=10分
- 底部>=10点
- 领先>=10分
- 尾随>=10点
//iPad Pro 1366x1024
//iPad 1024x768
//iPad Mini 1024x468
//iPhone 6 Plus 736x414
//iPhone 6 677x375
//iPhone 5 568x320
//iPhone 4 480x320
因此,基于此,上述限制将在iPhone4(也包括iPhoneSE)上产生一个300x300的正方形,因为最窄的轴将是320减去两个10点的边距。在12.9英寸的iPad Pro上,它将是一个1004x1004的正方形
在代码中创建约束时,还可以使用以下代码创建layoutMarginGuide:
let margins = view.layoutMarginsGuide
这应该与在IB中选中“包含到页边距”复选框相同。本质上,这是每个设备的建议页边距大小。(我认为这还应该包括状态栏、选项卡和导航栏,甚至包括iPhone的“phone call top banner(sic)”。但我在这方面遇到了一些问题。)
编辑2:
综上所述,您通过“自动布局”定义的是一种非常流畅的方式,可以最大化正方形的大小(或者在您的例子中,将正方形变成圆形)。通过设置两组边距,一组等于但具有高优先级,您可以让auto layout知道它可能会打破这一限制。第二组值必须大于或等于
因此,在480x320设备中,无法满足的上/下边界约束(“等于”)可能会被打破,而在横向中,无法满足的前/后边界约束将被打破。请记住,您已经设置了中心X/Y,因此视图将居中,并且您设置了1:1的比例,使其成为正方形。(只要您没有触及优先级-默认设置是必需的。您有一个良好的开端-将两个中心X和Y对齐,比例为1:1。您需要添加的是两组具有不同优先级的顶部/底部和前导/尾随约束。以下是一个示例,它与您拥有的三个约束结合在一起,将成为中心沿较窄轴具有10点边界的所有方向的视图: 优先级==750
- Top=10分
- 底部=10分
- 领先=10分
- 尾随==10分
- 顶部>=10分
- 底部>=10点
- 领先>=10分
- 尾随>=10点
//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平方米