【问题标题】:How to round edges of UILabel with Swift如何用 Swift 圆化 UILabel 的边缘
【发布时间】:2015-06-30 18:55:50
【问题描述】:

我已经查看了 Xcode 6.3 中标签的属性,但我还没有发现如何像圆角文本字段的边缘那样圆角边缘。

【问题讨论】:

标签: ios swift


【解决方案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
            }
         }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-25
          相关资源
          最近更新 更多