Come disegnare il bordo attorno a un UILabel?

C’è un modo per UILabel di tracciare un confine attorno a sé? Questo è utile per me per eseguire il debug del posizionamento del testo e per vedere il posizionamento e quanto è effettivamente grande l’etichetta.

Puoi impostare il confine dell’etichetta tramite la sua proprietà sottostante CALayer:

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

Ecco alcune cose che puoi fare con UILabel e i suoi confini.

inserisci la descrizione dell'immagine qui

Ecco il codice per queste etichette:

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

Nota che in Swift non è necessario importare QuartzCore .

Guarda anche

  • Bordo, angoli arrotondati e ombra su un CALayer
  • Spiegazione di masksToBounds
  • Utilizzo di un bordo con un percorso di Bézier per un livello
  • Come fare le trasformazioni su un CALayer

Versione rapida:

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

Per Swift 3:

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

È ansible utilizzare questo repo: GSBorderLabel

È abbastanza semplice:

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

Swift 3/4 con @IBDesignable


Mentre quasi tutte le soluzioni di cui sopra funzionano bene, ma vorrei suggerire una class personalizzata @IBDesignable per questo.

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

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

Soluzione per Swift 4:

yourLabel.layer.borderColor = UIColor.green.cgColor;

dipende molto da quante boarder usano nella tua vista, a volte basta aggiungere un UIVIEW che la dimensione è un po ‘più grande per creare il bordo. il metodo è più veloce di una vista

L’utilizzo di una stringa NSAttributo per stringere le etichette attribuitoTesto è probabilmente la scelta migliore. Guarda questo esempio.