自动布局仅返回单个设备宽度。期待正在使用的设备宽度

时间:2017-03-14 16:10:15

标签: xcode swift3 autolayout

我正在尝试设置我的UIImageView角半径以生成圆形UIImageView。但是,当我在iPhone 7 Plus上运行我的应用程序时,图像不是安静的圆形。

    imageOutlet.layer.cornerRadius = imageOutlet.frame.size.width / 2

在调试此问题时,我注意到无论设备如何,返回的宽度都是相同的。然后,当我将故事板底部附近的“视图为:iPhone 7(w C,h R)”更改为iPhone 7 Plus时,所有这些都在iPhone 7 Plus上按预期工作,并且在iPhone 7上无法正常工作。 p>

我对使用的UIImageView的约束如下: UIImageView constraints

我的目的是能够获得正在使用的设备上的UIImageView的宽度。

2 个答案:

答案 0 :(得分:0)

UIImageView上添加宽度/高度限制以强制它们相等。如果图像的宽度/高度取决于屏幕尺寸,您将得到如您所描述的奇怪结果。由于Superview具有42像素的尾随/前导约束,因此图像的宽度将根据设备的不同而不同。您使用的公式仅适用于相同的宽度/高度。

答案 1 :(得分:0)

在解决这个问题一段时间后,我终于找到了解决方案。

摘要:在调用layoutIfNeeded()之前,在我的UIImageView电话上呼叫.frame.size.width会为正在运行该应用的设备产生正确的宽度。

<强>详情: 我的setAppearance()函数在viewDidLoad()函数中调用。在viewDidLoad()调用期间,应用程序返回的宽度基于默认设备(在我的情况下:iPhone 7)。即使我在iPhone 7 Plus模拟器上运行,也会发生这种情况。但是,viewDidLoad()之后的任何时候调用宽度都会根据运行应用程序的设备产生正确的宽度。

下面,我在iPhone 7s Plus上运行应用程序并在viewDidLoad功能期间打印宽度。在viewDidLoad() fn之后再次调用宽度时,宽度从281.0(iPhone 7预期大小)变为310.6667(iPhone 7 Plus预期大小)。

enter image description here

由于我的图像不完全是圆形的(我的意图是.frame.size.width/2调用),因此效果不理想。

但是,在访问layoutIfNeeded()的{​​{1}}成员之前调用width fn会在UIImageView fn期间产生以下宽度。

enter image description here

通过在指定宽度之前强制使用viewDidLoad() UIImageView的布局,应用程序在layoutIfNeeded()函数期间根据设备接收正确的宽度。 访问https://developer.apple.com/reference/uikit/uiview/1622507-layoutifneeded了解详情。