2015-08-11 9 views
6

Come si crea un UILabel con questo tipo di formato di testo? Useresti NSAttributedString?NSAribributoStringa con schede

enter image description here

+0

http://stackoverflow.com/questions/6699930/how-can-i-use-the-t-tab-operator-to-format-a-nsstring-in-columns – Mattias

+2

Questo è più a che fare con il layout che attributi di carattere, quindi non penso che sia qualcosa che è appropriato per 'NSAttributedString'. – trojanfoe

+0

Si dovrebbe esaminare l'uso dei vincoli di layout. – WMios

risposta

16

NSAttributedString in grado di creare colonne di testo con tabulazioni. Questo è simile a come è fatto in un word processor con le stesse limitazioni.

let text = "Name\t: Johny\nGender\t: Male\nAge\t: 25\nFavourites\t: Reading, writing" 

let paragraphStyle = NSMutableParagraphStyle() 
paragraphStyle.tabStops = [NSTextTab(textAlignment: NSTextAlignment.Left, location: 150, options: [:])] 
paragraphStyle.headIndent = 150 

label.attributedText = NSAttributedString(string: text, attributes: [NSParagraphStyleAttributeName: paragraphStyle]) 

Screenshot of label rendering the above attributed string

tabStops fornisce posizioni dei punti su dove continuare testo dopo ciascuna scheda. Qui abbiamo fatto una scheda in un punto ragionevole dopo la prima colonna. headIndent indica all'etichetta che il testo avvolto deve essere rientrato di una quantità fissa, quindi viene spostato sulla riga successiva.

I limiti di questo approccio sono:

  1. La scheda posizione di arresto è un valore punto fisso quindi è necessario sapere cosa si vuole. Se il valore scelto è inferiore alla larghezza della prima colonna per alcune linee, quelle linee verranno indentate in un'altra posizione.
  2. Il wrapping funziona solo se l'ultima colonna è quella che avvolge. Poiché la seconda colonna è stata preceduta da ":" Potresti voler aumentare il numero headIndent o anche dividere ":" per \t:\t e impostare un secondo punto di tabulazione. Se non stai lasciando passare il testo, questo non è un problema.

Se queste limitazioni sono troppo restrittive, è possibile ristrutturare l'etichetta in modo che sia una raccolta di più etichette con vincoli di layout automatico.