查看更改大小取决于设备屏幕大小,但应具有固定大小

时间:2017-06-20 21:02:32

标签: ios xcode autolayout

enter image description here

我创建了一个橙色圆圈,使用UIView100高度和100宽度,半径为50.这是在4英寸设置中完成的。 当我向上移动到4.7英寸或更高时,圆圈会变形。 我该怎么办,以便在较大的设备上显示圆圈时不会扭曲?

2 个答案:

答案 0 :(得分:5)

所以我猜你使用了Xcode的“重置为建议的约束”选项,如下所示:

reset to suggested constraints

当你这样做时,Xcode猜测你想要什么样的约束。不幸的是,在你的情况下,它猜错了。它确实创建了你想要的居中约束,但确实创建你想要的宽度和高度限制。相反,它创建了前沿和上边缘约束,如下所示:

edge constraints

因此,当您在较大的设备上加载场景时,为了满足这些约束,自动布局必须使视图更大,如下所示:

resized

要解决此问题,您需要删除边缘约束:

deleting edge constraints

添加宽度和高度限制:

adding width and height constraints

所以你对子视图的最终约束如下:

final constraints

根据这些限制,当您在较大的设备上加载场景时,子视图将保持居中而不会更改大小:enter image description here

答案 1 :(得分:1)

我打赌你使用一个固定的角​​半径来制作一个圆形的UIView(它也会有1:1宽高比的约束)。只需这样就可以计算角的半径,在这里可以知道视图的正确尺寸。 viewDidLayoutSubviews是个好地方,因为它会处理其他调整大小,如屏幕旋转。

override func viewDidLayoutSubviews() {
    self.circleView.layer.cornerRadius = self.circleView.frame.size.width / 2 // Assumes width == height because of 1:1 aspect ratio constraint
}

或者不要使视图的大小取决于屏幕的宽度或高度(即移除对边的约束,使其居中并赋予其固定的宽度和高度)