Ios 圆形UIImageView

Ios 圆形UIImageView,ios,swift,uiimageview,Ios,Swift,Uiimageview,我试图获得一个完整的UIImageView,但在不同的设备上呈现的效果似乎不同 在iPhone Xr上看起来像这样: 在iPhone 7上看起来像这样: 我的高度限制为60,代码如下: override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() self.userAvatar.layer.cornerRadius = self.userAvatar.frame.height / 2 se

我试图获得一个完整的UIImageView,但在不同的设备上呈现的效果似乎不同

在iPhone Xr上看起来像这样:

在iPhone 7上看起来像这样:

我的高度限制为60,代码如下:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    self.userAvatar.layer.cornerRadius = self.userAvatar.frame.height / 2
    self.userAvatar.layer.masksToBounds = false
    self.userAvatar.clipsToBounds = true
    self.userAvatar.layer.borderWidth = 0
}

有什么想法吗?

在我看来,您给出了图像的前导和尾随约束,而不是固定的宽度

要实现圆形,请将图像视图的宽度指定为高度。
这是由于设备的宽度不同造成的。

在我看来,您给出的是图像的前导和尾随约束,而不是固定的宽度

要实现圆形,请将图像视图的宽度指定为高度。
这是因为设备的宽度不同。

将高度限制为宽度

并且,创建一个简单的UIImageView子类:

class RoundedImageView: UIImageView {
    override func layoutSubviews() {
        super.layoutSubviews()
        layer.cornerRadius = bounds.height / 2
    }
}

框架可以并且将根据视图生命周期进行更改。通过更新布局子视图中的拐角半径,它将使其保持圆形。

将高度约束为宽度

并且,创建一个简单的UIImageView子类:

class RoundedImageView: UIImageView {
    override func layoutSubviews() {
        super.layoutSubviews()
        layer.cornerRadius = bounds.height / 2
    }
}

框架可以并且将根据视图生命周期进行更改。通过更新layoutSubviews中的拐角半径,它将保持圆形。

如果使用Interface Builder(即故事板或XIB)管理此视图,则可以通过定义纵横比约束,直接将方形形状与视图中已有的圆角组合起来,使其成为圆形。不需要编写任何代码

控制拖动,就像您从图像视图创建出口、动作等一样,然后出现以下弹出窗口

选择纵横比,这将创建一个约束匹配,无论视图的当前比率在本例中是什么,它是15:8。如果视图已为正方形,则创建的约束应已正确

如果没有,可以通过单击尺寸检查器的以下图标来查找该约束:

从那里,可以双击该约束进行编辑,并将乘数更改为1:1:


事实上,一个更简单的选项是,一旦您将控件从视图拖动到自身,按住Alt/Opt,弹出窗口中显示的选项将更改为纵横比1:1,这意味着您可以直接从那里进行设置,而无需编辑约束。

如果您使用界面生成器(即故事板或XIB)管理此视图,通过为其纵横比定义约束,可以直接从那里强制将方形形状与视图中已有的圆角组合在一起,使其成为圆形。不需要编写任何代码

控制拖动,就像您从图像视图创建出口、动作等一样,然后出现以下弹出窗口

选择纵横比,这将创建一个约束匹配,无论视图的当前比率在本例中是什么,它是15:8。如果视图已为正方形,则创建的约束应已正确

如果没有,可以通过单击尺寸检查器的以下图标来查找该约束:

从那里,可以双击该约束进行编辑,并将乘数更改为1:1:


事实上,一个更简单的选项是,一旦将控件从视图拖动到自身,按住Alt/Opt,弹出窗口中显示的选项将更改为纵横比1:1,这意味着您可以直接从那里设置它,而无需编辑约束。

您有宽度约束或前导和尾随约束吗?请设置高度和宽度相等约束。我认为您设置了前导和尾随约束,而不是只设置前导/尾随高度和宽度。您有宽度约束或前导和尾随约束吗尾随?请设置高度和宽度相等的约束。我认为您设置了前导和尾随约束,而不是只设置前导/尾随高度和宽度