如何在Swift中创建一个圆形UIView

10
下面的代码在iPhone上正常工作,但在iPad上圆形不是均匀的。
我该如何使视图在两个设备上都呈现为圆形?
let width:CGFloat = UIScreen.main.bounds.width*0.0533      
label.layer.masksToBounds = true
label.layer.cornerRadius = width/2

enter image description here


1
我认为高度似乎不等于宽度。 - mqz.kim
1
另一个原因是您的按钮宽度是小数而不是四舍五入的整数。(例如33.33像素) - Tony Nguyen
1
label.layer.cornerRadius = min(label.frame.size.width/2, label.frame.size.height/2) 这样可以使圆角变得平滑,即使原始框架不是正方形。 - holex
4个回答

10

如果您想让您的UIView显示为圆形,则有几种方法可做到。

  • 将其角半径设置为宽度/高度的一半(最常见的方法)

如果您事先不知道视图的高度/宽度,则可以简单地在其父视图类中重写layoutSubviews()函数或在视图控制器中重写func viewDidLayoutSubviews()函数,并在那里直接设置角半径。

override func layoutSubviews() {
  super.layoutSubviews()
  label.layer.cornerRadius = label.frame.size.width/2
}

别忘了将UIView的layer的masksToBounds属性设置为true。

  • 设置遮罩层

为遮罩层指定贝塞尔路径。每当视图改变大小时,都必须更新图层的框架。

  • 圆角图片

如果你正在处理图片,还可以考虑在UIImageView中显示之前对图片本身进行切圆角处理 - 从性能上来看,这可能比之前的选项更快。


8
为了制作完整的圆形,您应该保持标签的高度和宽度相同。使用以下代码。
let width:CGFloat = UIScreen.main.bounds.width*0.0533  
label.frame = CGRect(0,0,width,width)    
label.layer.masksToBounds = true
label.layer.cornerRadius = width/2

3

这种情况可能是由于自动布局因约束冲突而更改标签的大小。

检查调试控制台以查看是否发生了这种情况,或者只需使用“调试视图层次结构”查看视图的实际尺寸。 enter image description here


0

我发现要使uiview成为圆形,除了.frame.size.height / 2之外,uiview的宽度和高度也应该相等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接