如何用 Swift 圆化 UILabel 的边缘
Posted
技术标签:
【中文标题】如何用 Swift 圆化 UILabel 的边缘【英文标题】:How to round edges of UILabel with Swift 【发布时间】:2015-06-30 18:55:50 【问题描述】:我已经查看了 Xcode 6.3 中标签的属性,但我还没有发现如何像圆角文本字段的边缘那样圆角边缘。
【问题讨论】:
How do I create a round cornered UILabel on the iPhone? 的可能重复项 【参考方案1】:诀窍是将maskToBounds
设置为true。然后您对cornerRadius
的修改将可见。
label.layer.masksToBounds = true
label.layer.cornerRadius = 5
【讨论】:
"label.layer.masksToBounds = true" 是一个重要的代码,如果您将圆角半径应用于标签并且如果它不起作用,那么添加它肯定会添加特定标签的角半径..所以这应该是正确的答案.. 谢谢@spencer.sm!! 正确答案!【参考方案2】:假设您在标签中添加了backgroundColor
,否则无法判断它是否有边缘,您可以使用 QuartzCore 对标签的边缘进行圆角处理。
import QuartzCore
yourLabel.layer.backgroundColor = UIColor.redColor().CGColor
yourLabel.layer.cornerRadius = 5
yourLabel.layer.masksToBounds = true
【讨论】:
yourLabel.layer.masksToBounds 必须设置为 true。【参考方案3】:使用标签层圆角半径来做到这一点,
mylabel.layer.cornerRadius = yourvalue
如果你不想显示阴影然后添加,
mylabel.layer.masksToBounds = true
它对我很有效。
【讨论】:
请注意,这在 Swift 3 及更高版本中现在是clipToBounds
。
clipToBounds
属性也可以在 Interface Builder (Storyboard) 中标签的属性检查器中启用,位于视图的绘图部分下。
@JamesHeald NO,clipToBounds 用于 UIView,maskToBounds 用于 CALayer。【参考方案4】:
你可以给cornerRadius
和这样的边框。
对于 Swift 5、4 和 3
MyLable.layer.masksToBounds = true
MyLable.layer.cornerRadius = 6
MyLable.layer.borderWidth = 2
MyLable.layer.borderColor = UIColor.black.cgColor
对于 Objective-C
[MyLable.layer setMasksToBounds:TRUE];
[MyLable.layer setCornerRadius:6];
[MyLable.layer setBorderWidth:2];
[MyLable.layer setBorderColor:[UIColor blackColor].CGColor];
【讨论】:
【参考方案5】:对任何CALayer
进行圆角处理的方法是修改layer.cornerRadius
。默认情况下,这只会影响您应用的背景颜色和任何图层边框。您还可以启用clipsToBounds
来裁剪像素内容。
当一个视图(例如UILabel
)绘制自己时,它会将自己绘制到图层的像素内容中。您可以抓住view.layer
访问图层。
因此您可以设置该层的圆角半径来影响视图的背景颜色。您还可以启用clipsToBounds
以裁剪视图中的任何内容。如果视图本身不会太靠近边缘,那应该可以实现您想要的。标签应该是正确的。
【讨论】:
很好的答案!基本上这意味着你必须添加这一行: L.backgroundColor = UIColor.blackColor() ; L.layer.cornerRadius = 5.0 ; L.clipsToBounds = true // L 是你的 UILabel 不是真的 - 你绝对会继承它!【参考方案6】:选择您的UILabel
在您的检查器中,添加 layer.masksToBounds
和 layer.cornerRadius
在您的课程中处理更少的代码?
【讨论】:
这是一个很好的解决方案,可以在没有代码的情况下在设计时分配属性【参考方案7】:斯威夫特:
//round shape corner radius set
self.lblName.layer.masksToBounds = true
self.lblName.layer.cornerRadius = self.lblName.bounds.width / 2
//custom shape corner radius set
self.lblName.layer.masksToBounds = true
self.lblName.layer.cornerRadius = 12
【讨论】:
【参考方案8】:在带有 Swift 3 的 Xcode 8.1.2 中运行良好,在 2017 年 8 月测试
“cornerRadius”是设置圆角边缘的关键属性,如果您对应用程序中的所有标签使用相同的样式,我建议您使用扩展方法。
代码:
// extension Class
extension UILabel
// extension user defined Method
func setRoundEdge()
let myGreenColor = (UIColor(red: -0.108958, green: 0.714926, blue: 0.758113, alpha: 1.0))
//Width of border
self.layer.borderWidth = 1.0
//How much the edge to be rounded
self.layer.cornerRadius = 5.0
// following properties are optional
//color for border
self.layer.borderColor = myGreenColor.cgColor
//color for text
self.textColor = UIColor.red
// Mask the bound
self.layer.masksToBounds = true
//clip the pixel contents
self.clipsToBounds = true
输出:
为什么要扩展方法?
创建一个 Swift 文件并将以下代码添加到“UILabel”类中,其中包含 Extention 方法,该方法是用户定义的,但适用于应用程序中的所有标签,有助于保持一致性和干净的代码,如果您将来更改任何样式,只需要在扩展方法中。
【讨论】:
【参考方案9】:您使用 IBInspectable 为 UIView 创建扩展
extension UIView
@IBInspectable var cornerRadius: CGFloat
get
return layer.cornerRadius
set
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
@IBInspectable var borderWidth: CGFloat
get
return layer.borderWidth
set
layer.borderWidth = newValue
@IBInspectable var borderColor: UIColor?
get
return UIColor(cgColor: layer.borderColor!)
set
layer.borderColor = newValue?.cgColor
【讨论】:
以上是关于如何用 Swift 圆化 UILabel 的边缘的主要内容,如果未能解决你的问题,请参考以下文章
如何用matlab实现对边缘检测后的图像的边缘细化和曲线拟合?