Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 视图根据设备屏幕大小更改大小,但应具有固定大小_Ios_Xcode_Autolayout - Fatal编程技术网

Ios 视图根据设备屏幕大小更改大小,但应具有固定大小

Ios 视图根据设备屏幕大小更改大小,但应具有固定大小,ios,xcode,autolayout,Ios,Xcode,Autolayout,我已经创建了一个橙色的圆圈,使用UIView100高度和100宽度,半径为50。这是在4英寸设置中完成的。 当我向上移动到4.7英寸或更高时,圆圈会扭曲。 我该怎么做才能使圆形在较大的设备上显示时不会失真?我打赌您使用了固定的角半径来制作圆形UIView(这也会有1:1纵横比的约束)。只要这样做,角的半径就可以在某个地方计算出来,在那里可以知道视图的正确尺寸。viewDidLayoutSubviews是一个很好的地方,因为它可以处理其他大小调整,如屏幕旋转 override func viewD

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

我打赌您使用了固定的角半径来制作圆形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
}

或者,不要让视图的大小取决于屏幕的宽度或高度(即,移除侧面的约束,将其居中,并给它一个固定的宽度和高度)

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

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

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

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

并添加宽度和高度约束:

因此,子视图上的最终约束如下所示:


有了这些约束,当您将场景加载到更大的设备上时,子视图将保持居中且不改变大小:

您是如何创建该圆的?以编程方式(通过代码)还是仅在storyboard/xib文件中?您使用的是自动布局约束吗?我在右侧的属性检查器中输入了宽度和高度。然后我以编程方式添加了半径。是的,我按了自动布局按钮,这就是我的结局。圆圈位于正确的位置,但在较大的设备上放置时会扭曲。编辑您的问题以显示该圆圈视图上布局约束的屏幕截图。我怀疑您在UIView的底部有一个固定的约束导致它被拉伸,并且您可能会在Xcode控制台中看到一个“断开的约束”警告,因为它不能同时执行底部约束和高度约束。对于一个问题,我所看到的最好答案是,请继续做好工作。