Как нарисовать границу вокруг UILabel?

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


person Boon    schedule 22.02.2010    source источник


Ответы (9)


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

#import <QuartzCore/QuartzCore.h>

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

Swift 5:

myLabel.layer.borderColor = UIColor.darkGray.cgColor
myLabel.layer.borderWidth = 3.0
person Vladimir    schedule 22.02.2010
comment
Компилятор жалуется на отсутствие определения borderColor и borderWidth в CALayer. - person Boon; 22.02.2010
comment
они доступны только начиная с SDK 3.0 :( Если вам нужно быстрое решение для отладки, вы можете установить полупрозрачный цветной фон для своей метки. - person Vladimir; 22.02.2010
comment
Если компилятор жалуется, возможно, вы забыли #import <QuartzCore/QuartzCore.h> - person Stefan Arentz; 22.02.2010
comment
Убедитесь, что вы установили ширину границы, потому что я предполагаю, что она по умолчанию равна нулю, и вы не увидите ее, если не установите ее. - person Tyler Collier; 24.11.2011
comment
@Vladimir Это решение добавляет границу ко всем сторонам этикетки. Можно ли добавить границу только с правой стороны метки ??? - person chinthakad; 20.04.2012
comment
@chinthakad, нет. Я думаю, вам понадобится подкласс пользовательских меток с пользовательским рисунком для этого - person Vladimir; 20.04.2012
comment
В Swift первая строка будет гласить: myLabel.layer.borderColor = UIColor.greenColor().CGColor - person Roshambo; 22.01.2015

Вот несколько вещей, которые вы можете сделать с UILabel и его границами.

введите описание изображения здесь

Вот код этих ярлыков:

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.

См. также

person Suragch    schedule 08.10.2015
comment
Как тебе удалось достать эти набивки? Мой текст касается границ ... - person eestein; 16.11.2016
comment
@eestein, я думаю, что просто перетащил размер метки побольше в Интерфейсном Разработчике. Или я мог бы установить для них ограничения по размеру. - person Suragch; 17.11.2016

Быстрая версия:

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

Для Swift 3:

myLabel.layer.borderWidth = 0.5
myLabel.layer.borderColor = UIColor.green.cgColor
person Esqarrouth    schedule 25.02.2015
comment
это будет myLabel.layer.borderColor = UIColor.blackColor().CGColor! - person Shruti; 24.03.2015

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
        }
    }
}
person Vakas    schedule 02.06.2017

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

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

GSBorderLabel *myLabel = [[GSBorderLabel alloc] initWithTextColor:aColor
                                                     andBorderColor:anotherColor
                                                     andBorderWidth:2];
person JAA    schedule 16.12.2012
comment
Это касается границы вокруг фактических символов в тексте, вопрос касается границ вокруг прямоугольника, в котором содержится текст. - person jjxtra; 26.03.2013

Свойства UILabel borderColor, borderWidth, cornerRadius в Swift 4

@IBOutlet weak var anyLabel: UILabel!
   override func viewDidLoad() {
        super.viewDidLoad()
        anyLabel.layer.borderColor = UIColor.black.cgColor
        anyLabel.layer.borderWidth = 2
        anyLabel.layer.cornerRadius = 5
        anyLabel.layer.masksToBounds = true
}
person Sanjay Mali    schedule 16.05.2018
comment
Спасибо! Я использовал информацию из этого ответа в своем решении PaddedLabel with Border здесь: stackoverflow.com/a/67317976/826946. Также дал ссылку сюда. - person Andy Weinstein; 29.04.2021

Решение для Swift 4:

yourLabel.layer.borderColor = UIColor.green.cgColor

person Exitare    schedule 21.06.2018

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

person chings228    schedule 06.03.2013

Возможно, лучше всего использовать строку NSAttributedString для ваших меток attributedText. Посмотрите этот пример.

person Bueno    schedule 19.10.2016