2010-02-22 3 views
121

Есть ли способ для UILabel рисовать границу вокруг себя? Это полезно для меня, чтобы отлаживать размещение текста и видеть место размещения и насколько большой наклейка на самом деле.Как нарисовать границу вокруг UILabel?

ответ

232

Вы можете установить границы лейбла через его основной CALayer собственности:

#import <QuartzCore/QuartzCore.h> 

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

Компилятор жалуется, что в CALayer отсутствует определение borderColor и borderWidth. – Boon

+2

они доступны только для запуска SDK 3.0 :(Если вы хотите просто быстрое решение для цели отладки, вы можете установить полупрозрачный цветной фон для вашей метки. – Vladimir

+36

Если компилятор жалуется, вы, вероятно, забыли «#import» ' –

2

Вы можете использовать этот репозиторий: GSBorderLabel

Это довольно просто:

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

Это касается границы вокруг фактических символов в тексте , речь идет о границах вокруг прямоугольника, в котором содержится текст. – jjxtra

0

это действительно зависит от того, сколько Пограничное использование, на ваш взгляд, иногда добавляет UIVIEW, размер которого немного больше, чтобы создать границу. метод быстрее, чем производить в целях

15

Swift версия:

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

Для Swift 3:

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

это будет 'myLabel.layer.borderColor = UIColor.blackColor(). CGColor!' – Shruti

+0

спасибо, отредактировал ответ – Esqarrouth

56

Вот некоторые вещи, которые вы можете сделать с 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 
    } 
} 

Обратите внимание, что в Swift нет необходимости импортировать QuartzCore.

Смотрите также

+1

Как вы могли получить эти отступы? Мой текст касается границ ... – eestein

+1

@eestein, я думаю, что я просто потянул размер метки больше в Interface Builder. Или я мог бы установить ограничения по размеру на них. – Suragch

1

Swift 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 
     } 
    } 
} 
Смежные вопросы