2017-06-20 40 views
1

enter image description here查看改变大小取决于设备的屏幕尺寸,但应该有一个固定的大小

我已创建使用UIView100高度和宽度100与50的半径将其在4英寸的设置完成橙色圆。 当我移动到4.7英寸或更高时,圆圈变形。 我该怎么做才能让圆圈在大型设备上显示时不会变形?

+1

您是如何创建该圆的?以编程方式(通过代码)或仅在您的故事板/ xib文件中?是否有你使用的AutoLayout约束? –

+0

我在右侧的属性检查器中输入了宽度和高度。然后我编程添加了半径。是的,我点击了自动布局按钮,这就是我最终的结果。圆圈位于正确的位置,但放置在较大的设备上时会发生弯曲。 – pete800

+0

编辑您的问题以显示该圆圈UIView上的布局约束的屏幕截图。我怀疑你对UIView的底部有一个固定的约束,导致它被拉长,并且你可能会在Xcode控制台中看到一个“破坏的约束”警告,因为它不能同时执行底部约束和高度约束。 –

回答

4

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

reset to suggested constraints

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

edge constraints

所以,当您加载场景更大的设备上,以满足这些约束,自动布局必须做出视图大小,像这样的:

resized

要解决这个问题,你需要删除边缘约束:

deleting edge constraints

并添加宽度和高度的限制:

adding width and height constraints

所以你在子视图这个样子的最终约束:

final constraints

有了这些限制,当你加载一个场景子视图将保持居中并且不会更改大小:enter image description here

+0

我已经看到一个问题的最佳答案,保持良好的工作人员。 – pete800

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 
} 

或者不要让您的视图的大小取决于屏幕的宽度或高度(即除去约束两侧,中心它,并给它一个固定的宽度和高度)

相关问题