圆形图像成为钻石不圆 - 斯威夫特3

时间:2016-11-15 22:18:54

标签: xcode uiimageview constraints swift3

我一直试图创建一个圆形图像但由于某种原因它已经输出为钻石。这是我的代码:

override func viewDidLoad() {
    displayEmailFullNameImage()

    self.editProfilePictureImage.layer.cornerRadius = editProfilePictureImage.frame.size.width / 2
    self.editProfilePictureImage.clipsToBounds = true
    self.editProfilePictureImage.contentMode = .scaleAspectFill

}

我对照片的限制:

enter image description here

我尝试过以下解决方案:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    profilePic.layer.cornerRadius = profilePic.frame.width / 2
    profilePic.clipsToBounds = true
}

但这也不起作用。

这是图像的外观:

enter image description here

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

您的问题可能是由于您添加到imageView的一些限制造成的。尝试只添加4个约束,1个用于固定宽度,1个用于固定高度,1个用于前导空间,1个用于顶部空间,如下面的屏幕截图所示:

enter image description here

答案 1 :(得分:0)

问题在于viewWillLayoutSubviews在布局过程中还为时过早。您可以在viewDidLayoutSubviews中做到这一点。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    profilePic.layer.cornerRadius = min(profilePic.frame.width, profilePic.frame.height) / 2
    profilePic.clipsToBounds = true
}

或者,您也可以使用可设计的视图,并由该视图来处理:

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

通过使其可设计,您可以在Interface Builder中看到带有圆角的渲染。

答案 2 :(得分:0)

我遇到了同样的问题,但是因为我已经从另一个视图复制并粘贴了该单元格,所以该单元格类正在为它提供用于另一个单元格的指令。