如何在圈子 Swift 5 中设置 UIImageView

Posted

技术标签:

【中文标题】如何在圈子 Swift 5 中设置 UIImageView【英文标题】:How to Set UIImageView in circle Swift 5 【发布时间】:2021-02-26 11:43:57 【问题描述】:

此代码仅适用于固定高度和宽度。使用multiplier时如何Round UIImageView?

这里是圈出我的 ImageView 的代码。宽度和高度为 300。

class MusicViewController: UIViewController 

    @IBOutlet weak var imgAlbum: UIImageView!
    override func viewDidLoad() 
        super.viewDidLoad()
        imgAlbum.layer.borderWidth = 1
        imgAlbum.layer.masksToBounds = false
        imgAlbum.layer.borderColor = UIColor.black.cgColor
        imgAlbum.layer.cornerRadius = imgAlbum.frame.height/2
        imgAlbum.clipsToBounds = true
    
    

如果我将高度和宽度更改为乘数。现在,高度 0.5 和宽度 0.8 的乘数。 (与SuperView成比例的高宽)

【问题讨论】:

这能回答你的问题吗:***.com/questions/32362934/… 您好,Kishan,我已经检查过了,但没有发生相同的输出。谢谢! 圆形需要正方形。所以使用 1:1 的纵横比并给出成比例的高度或宽度。不是都。另外,对角半径使用 viewDidLayoutSubview 方法 通过设置不同的宽高大小,无法实现圆形。这是数学:) 哈哈,所以首先我需要设置高度和宽度,然后设置图像视图的比例对吗? 【参考方案1】:

正如@RajaKishan 和@aiwiguna 都说你不能同时得到一个具有比例高度和宽度约束的方形图像,因为那样你就不能得到一个具有不同高度和宽度的圆形。

您可以设置与superview 成比例的宽度或高度,并将纵横比设置为1:1,然后您可以更改乘数并正确获得圆。您可以检查附加图像的约束

然后将cornerRadius 设置为viewDidLayoutSubviews(),而不是viewDidLoad()。 (viewDidLoad() 在布局约束改变视图高度之前被调用,并且只调用一次。viewDidLayoutSubviews() 在视图的几何形状发生变化时被调用,所以你应该在那里调用任何布局逻辑。

override func viewDidLayoutSubviews()  

    self.yourImageView.layer.cornerRadius = self.yourImageView.bounds.height/2
    self.yourImageView.clipsToBounds = true


【讨论】:

如果您添加步骤来限制您首先执行的比例高度和宽度或纵横比会有所帮助吗?谢谢! 只添加一个高度或宽度,而不是两者【参考方案2】:

像这样一起使用比例宽度和比例高度约束你不会得到一个正方形,在不同的设备中它会有不同的高度和宽度

我的建议是只使用一个比例宽度或比例高度(你想要哪个)并在视图上使用纵横比约束 1:1

【讨论】:

感谢您的回答!现在工作正常!

以上是关于如何在圈子 Swift 5 中设置 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中设置图像按钮

swift:在导航栏中设置后退按钮图像

如何在 UIImage 数组中设置第二张或中间的图像? (斯威夫特 3)

如何在 API 调用中设置完成处理程序 - Swift 5

iOS - Swift - UIImage 上的可点击区域

尝试在 Swift 5 中设置 UISearchController 的背景颜色