Як намалювати межу навколо UILabel?


140

Чи існує спосіб, щоб UILabel намалював кордон навколо себе? Це корисно для мене, щоб налагодити розміщення тексту та переглянути місце розташування та наскільки велика мітка насправді.

Відповіді:


260

Ви можете встановити межу мітки за допомогою її основної властивості CALayer:

#import <QuartzCore/QuartzCore.h>

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

Швидкий 5:

myLabel.layer.borderColor = UIColor.darkGray.cgColor
myLabel.layer.borderWidth = 3.0

2
вони доступні лише за допомогою SDK 3.0 :( Якщо ви хочете просто швидко вирішити для налагодження, ви можете встановити напівпрозорий кольоровий фон для вашої етикетки.
Vladimir

36
Якщо компілятор скаржиться, то ви, мабуть, забули#import <QuartzCore/QuartzCore.h>
Стефан Аренц

1
@Vladimir Це рішення додає рамку на всі сторони етикетки. Чи можемо ми додати рамку лише правою стороною мітки ???
чинтхакад

1
@chinthakad, ні. Я думаю, вам знадобиться спеціальний підклас міток із спеціальним малюнком для цього
Володимир

3
У Свіфті перший рядок myLabel.layer.borderColor = UIColor.greenColor().CGColor
звучав

71

Ось декілька речей, які ви можете зробити з 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.

Дивитися також


1
Як вам вдалося дістати ці накладки? Мій текст торкається кордонів ...
eestein

1
@eestein, я думаю, що я просто перетягнув розмір етикетки у програмі Interface Builder. Або я можу встановити обмеження щодо розміру на них.
Сурагч

19

Швидка версія:

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!
Шруті

7

Перемістіть 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
        }
    }
}

2

Ви можете використовувати це репо: GSBorderLabel

Це досить просто:

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

Це стосується меж навколо фактичних символів тексту, питання стосується меж навколо прямокутника, в якому міститься текст.
jjxtra

1

Властивості UILabel borderColor, borderWidth, cornerRadius in 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
}


0

це дійсно залежить від того, скільки бордер використовує ваш погляд, іноді просто додайте UIVIEW, розмір якого трохи більший, щоб створити кордон. метод швидший, ніж створювати подання


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.