如何在UILabel上绘制边框?

问题描述:

有没有办法让UILabel在自己周围绘制边框?这对我调试文本位置以及查看放置位置以及标签的实际大小非常有用。如何在UILabel上绘制边框?

你可以通过它的底层CALayer的属性设置标签的边框:

#import <QuartzCore/QuartzCore.h> 

myLabel.layer.borderColor = [UIColor greenColor].CGColor; 
myLabel.layer.borderWidth = 3.0; 
+0

编译器抱怨CALayer中没有borderColor和borderWidth的定义。 – Boon 2010-02-22 15:15:07

+2

它们只能从SDK 3.0开始使用:(如果你只想快速解决调试问题,你可以为你的标签设置半透明的彩色背景 – Vladimir 2010-02-22 15:22:04

+36

如果编译器抱怨,那么你可能忘了'#import ' – 2010-02-22 15:37:58

您可以使用此回购:GSBorderLabel

这是很简单的:

GSBorderLabel *myLabel = [[GSBorderLabel alloc] initWithTextColor:aColor 
                andBorderColor:anotherColor 
                andBorderWidth:2]; 
+0

这涉及到文本中实际字符的边框,问题在于围绕矩形文本所包含的边框。 – jjxtra 2013-03-26 15:11:28

这真的取决于有多少寄宿生在你的视图中使用,有时候,只需添加一个大小稍大的UIVIEW来创建边界。该方法比产生视图

斯威夫特版本快:

myLabel.layer.borderWidth = 0.5 
myLabel.layer.borderColor = UIColor.greenColor().CGColor 

对于斯威夫特3:

myLabel.layer.borderWidth = 0.5 
myLabel.layer.borderColor = UIColor.green.cgColor 
+1

它将是'myLabel.layer.borderColor = UIColor.blackColor()。CGColor!' – Shruti 2015-03-24 07:40:26

+0

谢谢,编辑答案 – Esqarrouth 2015-03-24 08:15:05

这里有一些事情你可以UILabel及其边界做。

enter image description here

下面是这些标签的代码:

import UIKit 
class ViewController: UIViewController { 

    @IBOutlet weak var label1: UILabel! 
    @IBOutlet weak var label2: UILabel! 
    @IBOutlet weak var label3: UILabel! 
    @IBOutlet weak var label4: UILabel! 
    @IBOutlet weak var label5: UILabel! 
    @IBOutlet weak var label6: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // label 1 
     label1.layer.borderWidth = 1.0 

     // label 2 
     label2.layer.borderWidth = 5.0 
     label2.layer.borderColor = UIColor.blue.cgColor 

     // label 3 
     label3.layer.borderWidth = 2.0 
     label3.layer.cornerRadius = 8 

     // label 4 
     label4.backgroundColor = UIColor.cyan 

     // label 5 
     label5.backgroundColor = UIColor.red 
     label5.layer.cornerRadius = 8 
     label5.layer.masksToBounds = true 

     // label 6 
     label6.layer.borderWidth = 2.0 
     label6.layer.cornerRadius = 8 
     label6.backgroundColor = UIColor.yellow 
     label6.layer.masksToBounds = true 
    } 
} 

注意,在斯威夫特没有必要进口QuartzCore

+1

你怎么能够得到这些垫衬?我的文字触及边界... – eestein 2016-11-16 15:32:03

+1

@eestein,我想我只是在Interface Builder中将标签尺寸拉大了一些。或者我可能已经对它们设置了大小限制。 – Suragch 2016-11-17 00:29:05

,请参见使用NSAttributedString字符串为您的标签attributedText可能是你b我打赌。 Check out this example.

斯威夫特3/4与@IBDesignable


虽然几乎所有的上述解决方案的工作很好,但我会建议一个@IBDesignable自定义类此。

@IBDesignable 
class CustomLabel: UILabel { 

    /* 
    // Only override draw() if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override func draw(_ rect: CGRect) { 
     // Drawing code 
    } 
    */ 

    @IBInspectable var borderColor: UIColor = UIColor.white { 
     didSet { 
      layer.borderColor = borderColor.cgColor 
     } 
    } 

    @IBInspectable var borderWidth: CGFloat = 2.0 { 
     didSet { 
      layer.borderWidth = borderWidth 
     } 
    } 

    @IBInspectable var cornerRadius: CGFloat = 0.0 { 
     didSet { 
      layer.cornerRadius = cornerRadius 
     } 
    } 
}