2010-02-22 20 views
121

Esiste un modo per UILabel di disegnare un bordo 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.Come disegnare il bordo attorno a un UILabel?

risposta

232

È possibile impostare confine dell'etichetta tramite la sua proprietà CALayer sottostante:

#import <QuartzCore/QuartzCore.h> 

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

Il compilatore si lamenta che non esiste una definizione di borderColor e borderWidth all'interno di CALayer. – Boon

+2

sono disponibili solo all'avvio dell'SDK 3.0 :(Se si desidera una soluzione rapida per il debug, è possibile impostare lo sfondo colorato semitrasparente per l'etichetta – Vladimir

+36

Se il compilatore si lamenta, probabilmente si è dimenticato di #importare ' –

2

È possibile utilizzare questa repo: GSBorderLabel

E 'abbastanza semplice:

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

Questo riguarda il bordo attorno ai caratteri reali nel testo , la domanda sta parlando dei bordi attorno al rettangolo in cui è contenuto il testo. – jjxtra

0

in realtà dipende da quanti uso del boarder 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 produrre una visione

15

versione Swift:

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 
+1

sarà 'myLabel.layer.borderColor = UIColor.blackColor(). CGColor!' – Shruti

+0

grazie, modificato la risposta – Esqarrouth

56

Qui ci sono alcune cose che puoi fare con UILabel e dei suoi confini.

enter image description here

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

Si noti che a Swift non v'è alcuna necessità di importare QuartzCore.

Vedi anche

+1

Come sei riuscito a ottenere quelli imbottiture? Il mio testo sta toccando i bordi ... – eestein

+1

@eestein, penso di aver appena trascinato la dimensione dell'etichetta più grande in Interface Builder. Oppure potrei aver impostato limiti di dimensione su di loro. – Suragch

0

Utilizzando una stringa NSAttributedString per le etichette attributedText è probabilmente il vostro b scommessa Check out this example.

1

Swift 3/4 con @IBDesignable


Mentre quasi tutte le soluzioni di cui sopra funzionano bene, ma vorrei suggerire una classe @IBDesignable personalizzato 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 
     } 
    } 
} 
Problemi correlati