Risposte:
Modifica: Evidentemente NSAttributedStringlo farà, su iOS 6 e versioni successive. Invece di utilizzare un NSStringper impostare il testo dell'etichetta, creare un NSAttributedString, impostare gli attributi su di esso, quindi impostarlo come .attributedTextsull'etichetta. Il codice che desideri sarà qualcosa del genere:
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;
Vecchio attributedStringWithString di NSAttributedString fatto la stessa cosa, ma ora che è stato deprecato.
Per ragioni storiche, ecco la mia risposta originale:
Risposta breve: non puoi. Per modificare la spaziatura tra le righe di testo, dovrai creare una sottoclasse UILabele rotolare la tua drawTextInRect, creare più etichette o utilizzare un carattere diverso (forse uno modificato per un'altezza di riga specifica, vedi la risposta di Phillipe).
Risposta lunga: nel mondo della stampa e online, lo spazio tra le righe di testo è noto come "leading" (fa rima con "intestazione" e deriva dal piombo usato decenni fa). Leading è una proprietà di sola lettura di UIFont, che è stata deprecata nella 4.0 e sostituita da lineHeight. Per quanto ne so, non c'è modo di creare un carattere con un insieme specifico di parametri come lineHeight; ottieni i caratteri di sistema e qualsiasi carattere personalizzato che aggiungi, ma non puoi modificarli una volta installati.
Non ci sono nemmeno parametri di spaziatura UILabel.
Non sono particolarmente soddisfatto UILabeldel comportamento di così com'è, quindi suggerisco di scrivere la tua sottoclasse o di utilizzare una libreria di terze parti. Ciò renderà il comportamento indipendente dalla scelta del carattere e sarà la soluzione più riutilizzabile.
Vorrei che ci fosse più flessibilità UILabele sarei felice di essere smentito!
A partire da ios 6 puoi impostare una stringa attribuita nell'etichetta UIL:
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 ;
AttributedStringdisabilita per esempio l'allineamento del testo dell'etichetta, quindi devi aggiungerlo allo stile di paragrafo.
Da Interface Builder:

livello di programmazione:
SWift 4
Utilizzo dell'estensione dell'etichetta
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 chiama la 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 usando l'istanza dell'etichetta (basta copiare ed eseguire questo codice per vedere il 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
La mia soluzione è stata quella di correggere il file del carattere stesso e correggere definitivamente l'altezza della linea. 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).
Questo ragazzo ha creato una classe per ottenere l'altezza della riga (senza usare CoreText, come libreria MTLabel): https://github.com/LemonCake/MSLabel
La cosa migliore che ho trovato è: https://github.com/mattt/TTTAttributedLabel
È una sottoclasse UILabel, quindi puoi semplicemente rilasciarla e quindi modificare l'altezza della linea:
myLabel.lineHeightMultiple = 0.85;
myLabel.leading = 2;
Ho trovato librerie di terze parti come questa:
https://github.com/Tuszy/MTLabel
Per essere la soluzione più semplice.
Ecco un po 'di codice rapido per impostare la spaziatura delle righe a livello di programmazione
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
Ovviamente, la risposta di Mike non funziona se passi la stringa a livello di programmazione. In questo caso è necessario passare una stringa attribuita e modificarne 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;