Bagaimana cara menggambar perbatasan di sekitar UILabel?


140

Apakah ada cara bagi UILabel untuk menggambar perbatasan di sekitarnya? Ini berguna bagi saya untuk men-debug penempatan teks dan untuk melihat penempatan dan seberapa besar label sebenarnya.

Jawaban:


260

Anda dapat mengatur batas label melalui properti CALayer yang mendasarinya:

#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

2
mereka hanya tersedia mulai SDK 3.0 :( Jika Anda ingin hanya solusi cepat untuk tujuan debugging Anda dapat mengatur latar belakang berwarna semitransparan untuk label Anda.
Vladimir

36
Jika kompiler mengeluh maka Anda mungkin lupa#import <QuartzCore/QuartzCore.h>
Stefan Arentz

1
@Vladimir Solusi ini menambahkan perbatasan ke semua sisi label. Bisakah kita menambahkan perbatasan hanya di sisi kanan label ???
chinthakad

1
@ chinthakad, tidak. Saya pikir Anda akan memerlukan subclass label kustom dengan gambar kustom untuk itu
Vladimir

3
Di Swift, baris pertama berbunyi:myLabel.layer.borderColor = UIColor.greenColor().CGColor
Roshambo

71

Berikut adalah beberapa hal yang dapat Anda lakukan UILabeldan perbatasannya.

masukkan deskripsi gambar di sini

Berikut adalah kode untuk label tersebut:

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
    }
}

Perhatikan bahwa di Swift tidak perlu mengimpor QuartzCore.

Lihat juga


1
Bagaimana Anda bisa mendapatkan bantalan itu? Teks saya menyentuh perbatasan ...
eestein

1
@ eestein, saya pikir saya baru saja menyeret ukuran label yang lebih besar di Interface Builder. Atau saya mungkin telah menetapkan batasan ukuran pada mereka.
Suragch

19

Versi cepat:

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

Untuk Swift 3:

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

1
itu akanmyLabel.layer.borderColor = UIColor.blackColor().CGColor!
Shruti

7

Swift 3/4 dengan @IBDesignable


Meskipun hampir semua solusi di atas berfungsi dengan baik tetapi saya akan menyarankan @IBDesignablekelas khusus untuk ini.

@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

Anda dapat menggunakan repo ini: GSBorderLabel

Sederhana saja:

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

Ini berkaitan dengan perbatasan di sekitar karakter aktual dalam teks, pertanyaannya adalah berbicara tentang batas di sekitar persegi panjang teks yang terkandung.
jjxtra

1

UILabel properti borderColor, borderWidth, cornerRadius di 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
}

1

Solusi untuk Swift 4:

yourLabel.layer.borderColor = UIColor.green.cgColor


0

itu benar-benar tergantung pada berapa banyak asrama menggunakan dalam pandangan Anda, kadang-kadang, cukup tambahkan UIVIEW yang ukurannya sedikit lebih besar untuk membuat perbatasan. metode ini lebih cepat daripada menghasilkan tampilan


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.