Come modificare lo spazio tra le righe (interlinea) in una multilinea UILabel
?Imposta interlinea UIL
risposta
Modifica: Evidentemente NSAttributedString
lo farà, su iOS 6 e versioni successive. Invece di utilizzare NSString
per impostare il testo dell'etichetta, creare un NSAttributedString
, impostare gli attributi su di esso, quindi impostarlo come .attributedText
sull'etichetta. Il codice che si desidera sarà qualcosa di simile a questo: vecchio attributedStringWithString
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"Sample text"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:24];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, strLength)];
uiLabel.attributedText = attrString;
di NSAttributedString fatto la stessa cosa, ma ora che viene deprecato.
Per ragioni storiche, ecco la mia risposta originale:
Risposta breve: non si può. Per modificare la spaziatura tra le righe di testo, devi creare una sottoclasse di UILabel
e arrotolare il tuo drawTextInRect
, creare più etichette o utilizzare un carattere diverso (forse uno modificato per un'altezza specifica della linea, vedi la risposta di Phillipe).
Risposta lunga: Nel stampa e mondo online, lo spazio tra le righe di testo è noto come "leader" (che fa rima con 'voce', e viene dal metallo piombo decenni utilizzati fa). Il ruolo principale è una proprietà di sola lettura di UIFont
, che è stato ritirato in 4.0 e sostituito da lineHeight
. Per quanto ne so, non c'è modo di creare un font con un set specifico di parametri come lineHeight
; ottieni i font di sistema e qualsiasi font personalizzato che aggiungi, ma non puoi modificarli una volta installato.
Non esiste alcun parametro di spaziatura in UILabel
.
Non sono particolarmente soddisfatto del comportamento di UILabel
così com'è, quindi suggerisco di scrivere la propria sottoclasse o utilizzare una libreria di terze parti. Ciò renderà il comportamento indipendente dalla scelta del font e sarà la soluzione più riutilizzabile.
Mi piacerebbe che fosse maggiore flessibilità in UILabel
e sarei felice di essere smentito!
ho trovato 3rd Party biblioteche come questo:
https://github.com/Tuszy/MTLabel
per essere la soluzione più semplice.
MSLabel è uno migliore – trillions
Questo ragazzo ha creato una classe per ottenere line-height (senza l'utilizzo di CoreText, come biblioteca MTLabel): https://github.com/LemonCake/MSLabel
La mia soluzione era quella di patchare il file del font stesso e fissare la sua altezza della linea sicuramente. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
Ho dovuto modificare "lineGap", "ascender", "descender" nel blocco "hhea" (come nell'esempio del blog).
Super cool! Questi strumenti per font OS X hanno funzionato anche con il mio font OTF (sebbene specifichi solo TTF ...). Il mio font aveva altezza riga 1000 (!), L'ho cambiato a 0 e voilà.Avevo miglia e miglia di spazio vuoto sotto il testo su ogni linea. – Jonny
Non posso credere che questa sia la soluzione migliore (senza offesa!), Ma è di gran lunga la più semplice. Ho usato il software gratuito (Windows) [Type Light] (http://www.cr8software.net/typelight.html) (e in Font | Metrics | Advanced puoi modificare lineGap) per modificare i miei font. Permette anche di "rinominare" i caratteri, che non sono riuscito a capire come utilizzare lo strumento che Philippe ha menzionato. –
Questo è fantastico @Philippe! Grazie per il post!! – Robbie
partire in iOS 6 è possibile impostare una stringa attribuito nel UILabel:
NSString *labelText = @"some text";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:40];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
cell.label.attributedText = attributedString ;
grazie! aggiungerei che l'uso di 'AttributedString' disabilita l'allineamento del testo dell'etichetta di esempio, quindi devi aggiungerlo allo stile di paragrafo. – cyborg86pl
grazie, mi hai salvato la vita! –
La cosa migliore che ho trovato è: https://github.com/mattt/TTTAttributedLabel
E 'una sottoclasse UILabel così si può semplicemente cadere, e poi per modificare l'altezza della linea:
myLabel.lineHeightMultiple = 0.85;
myLabel.leading = 2;
myLabel.leading = 2; non funziona –
È possibile controllare la spaziatura tra le righe nello storyboard:
Tuttavia in Xcode 6.1.1 selezionare l'etichetta e modificare il valore della linea nel pannello attribuito causerà lo sfarfallio del pannello e il blocco dell'applicazione. Sono stato in grado di uscire dal pannello solo chiudendo forzatamente Xcode. – izk
Thumbs up per l'animazione – Tieme
Nella versione 7.1, il pannello si sposta e non ha alcun effetto sul tempo di esecuzione. Dovevo farlo in codice. – ByteArtisan
Naturalmente, la risposta di Mike non funziona se si passa la stringa di codice. In questo caso è necessario passare una stringa attribuita e cambiarne lo stile.
NSMutableAttributedString * attrString = [[NSMutableAttributedString alloc] initWithString:@"Your \nregular \nstring"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:4];
[attrString addAttribute:NSParagraphStyleAttributeName
value:style
range:NSMakeRange(0, attrString.length)];
_label.attributedText = attrString;
Ecco alcuni swift-codice per voi di impostare la spaziatura tra le righe di codice
let label = UILabel()
let attributedText = NSMutableAttributedString(string: "Your string")
let paragraphStyle = NSMutableParagraphStyle()
//SET THIS:
paragraphStyle.lineSpacing = 4
//OR SET THIS:
paragraphStyle.lineHeightMultiple = 4
//Or set both :)
let range = NSMakeRange(0, attributedText.length)
attributedText.addAttributes([NSParagraphStyleAttributeName : paragraphStyle], range: range)
label.attributedText = attributedText
Da Interface Builder:
di programmazione:
Swift 4
Utilizzando estensione in
extension UILabel {
func setLineSpacing(lineSpacing: CGFloat = 0.0, lineHeightMultiple: CGFloat = 0.0) {
guard let labelText = self.text else { return }
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineSpacing
paragraphStyle.lineHeightMultiple = lineHeightMultiple
let attributedString:NSMutableAttributedString
if let labelattributedText = self.attributedText {
attributedString = NSMutableAttributedString(attributedString: labelattributedText)
} else {
attributedString = NSMutableAttributedString(string: labelText)
}
// Line spacing attribute
attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))
self.attributedText = attributedString
}
}
Ora chiamare funzione di estensione
let label = UILabel()
let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"
// Pass value for any one argument - lineSpacing or lineHeightMultiple
label.setLineSpacing(lineSpacing: 2.0) . // try values 1.0 to 5.0
// or try lineHeightMultiple
//label.setLineSpacing(lineHeightMultiple = 2.0) // try values 0.5 to 2.0
o utilizzando esempio etichetta (Basta copiare & eseguire questo codice per vedere risultato)
let label = UILabel()
let stringValue = "Set\nUILabel\nline\nspacing"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
// Line spacing attribute
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
// Character spacing attribute
attrString.addAttribute(NSAttributedStringKey.kern, value: 2, range: NSMakeRange(0, attrString.length))
label.attributedText = attrString
Swift 3
let label = UILabel()
let stringValue = "Set\nUILabel\nline\nspacing"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
attrString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
label.attributedText = attrString
- 1. Imposta interlinea in QTextEdit
- 2. Allineamento verticale UIL
- 3. Interlinea GDI in Delphi?
- 4. UILabel interlinea negativa
- 5. TextView con colore di sfondo e interlinea
- 6. Riduzione delle dimensioni delle etichette UIL
- 7. Allineamento del testo del paragrafo UIL
- 8. Impostazione dell'altezza della linea/interlinea in un NSTextView
- 9. Utilizzo di Android-UIL, come interrompere il download?
- 10. Android: non visualizzato ImageView con Uil e TouchImageView
- 11. Assegnazione UIL persistente e occupa 8Mb di memoria
- 12. Come ottenere una singola riga in una casella Rich Text per apparire come interlinea singola
- 13. La modifica della proprietà di interlinea in NSParagraphStyle causa l'allungamento del cursore
- 14. Android - ImageLoader deve essere init con una configurazione prima di utilizzare in UIL
- 15. imposta LD_LIBRARY_PATH da Makefile
- 16. Imposta zoom per Webview
- 17. Imposta dinamicamente l'attributo DllImport
- 18. imposta ActionBarDrawerToggle all'angolo destro
- 19. ILASM non imposta FileVersion
- 20. Azione mancante Eclipse Imposta
- 21. Imposta sfondo nullo
- 22. Imposta TCP_QUICKACK e TCP_NODELAY
- 23. Imposta sfondo schermata iniziale
- 24. Imposta bordo in UICollectionView
- 25. Imposta variabile in jinja
- 26. Imposta opacità selezionabile
- 27. Imposta altezza cassetto cursore
- 28. Imposta errore Android
- 29. Imposta ListView item height
- 30. Imposta timeout connessione SSH
ho fatto con sub-classing UILabel, sostanzialmente idea è quella di dividere testo dell'etichetta in token, e poi la lunghezza identità di ogni token, creare un'etichetta separata per ogni token e aggiungere uno dopo l'altro. Questo è tutto. – Matrix
Bugie! ;) È possibile correggere un file di font per modificare l'altezza della linea - vedere la mia risposta su questa pagina. – Philippe
Sono [portato a credere] (http://stackoverflow.com/a/8162907/1167833) c'è un modo per farlo con NSAttributedString. Se hai bisogno di etichette con stringhe attribuite in pre iOS 6, consulta [OHAttributoLabel] (https://github.com/AliSoftware/OHAttributoLabel). –