如何用 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.masksToBoundslayer.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实现对边缘检测后的图像的边缘细化和曲线拟合?

圆化视图的右上角和左上角?

我不知道如何将 UILabel 转换为 UIImage.[swift] [重复]

matlab图像如何用代码完成图像的分割、边缘检测和拼接的任务?