Wie kann ich den Abstand zwischen Zeilen (Zeilenabstand) in einer mehrzeiligen Zeile ändern UILabel
?
quelle
Wie kann ich den Abstand zwischen Zeilen (Zeilenabstand) in einer mehrzeiligen Zeile ändern UILabel
?
Bearbeiten: Offensichtlich NSAttributedString
wird es unter iOS 6 und höher tun. Anstatt mit a NSString
den Text des Etiketts festzulegen, erstellen Sie ein NSAttributedString
, legen Sie Attribute darauf fest und legen Sie es dann als .attributedText
auf dem Etikett fest. Der gewünschte Code lautet ungefähr so:
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;
NSAttributedStrings alter attributedStringWithString hat das Gleiche getan, aber jetzt das ist veraltet.
Aus historischen Gründen ist hier meine ursprüngliche Antwort:
Kurze Antwort: Sie können nicht. Um den Abstand zwischen Textzeilen zu ändern, müssen Sie UILabel
Ihre eigenen Unterklassen drawTextInRect
erstellen und rollen , mehrere Beschriftungen erstellen oder eine andere Schriftart verwenden (möglicherweise eine, die für eine bestimmte Zeilenhöhe bearbeitet wurde, siehe Phillipes Antwort).
Lange Antwort: In der Print- und Online-Welt wird der Abstand zwischen den Textzeilen als "führend" bezeichnet (reimt sich auf "Überschrift" und stammt aus dem vor Jahrzehnten verwendeten Bleimetall). Leading ist eine schreibgeschützte Eigenschaft von UIFont
, die in 4.0 veraltet und durch ersetzt wurde lineHeight
. Soweit ich weiß, gibt es keine Möglichkeit, eine Schriftart mit einem bestimmten Parametersatz zu erstellen, z lineHeight
. Sie erhalten die Systemschriftarten und alle benutzerdefinierten Schriftarten, die Sie hinzufügen, können diese jedoch nach der Installation nicht mehr anpassen.
Es gibt auch keinen Abstandsparameter in UILabel
.
Ich bin mit UILabel
dem Verhalten nicht besonders zufrieden , daher empfehle ich, eine eigene Unterklasse zu schreiben oder eine Bibliothek eines Drittanbieters zu verwenden. Dadurch wird das Verhalten unabhängig von Ihrer Schriftartauswahl und die am besten wiederverwendbare Lösung.
Ich wünschte , es war mehr Flexibilität bei UILabel
, und ich würde gerne als falsch sein!
Ab iOS 6 können Sie im UILabel eine zugeordnete Zeichenfolge festlegen:
quelle
AttributedString
zum Beispiel die Textausrichtung des Etiketts deaktiviere, also musst du es dem Absatzstil hinzufügen.Sie können den Zeilenabstand im Storyboard steuern:
doppelte Frage
quelle
Vom Interface Builder:
Programmatisch:
SWift 4
Etikettenerweiterung verwenden
Rufen Sie jetzt die Erweiterungsfunktion auf
Oder verwenden Sie die Label-Instanz (Kopieren Sie einfach diesen Code und führen Sie ihn aus, um das Ergebnis zu sehen.)
Swift 3
quelle
Meine Lösung bestand darin, die Schriftartdatei selbst zu patchen und ihre Zeilenhöhe definitiv zu korrigieren. http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/
Ich musste 'lineGap', 'ascender', 'descender' im 'hhea'-Block ändern (wie im Blog-Beispiel).
quelle
Dieser Typ hat eine Klasse erstellt, um die Zeilenhöhe zu ermitteln (ohne CoreText als MTLabel-Bibliothek zu verwenden): https://github.com/LemonCake/MSLabel
quelle
Das Beste, was ich gefunden habe, ist: https://github.com/mattt/TTTAttributedLabel
Es ist eine UILabel-Unterklasse, sodass Sie sie einfach ablegen und dann die Zeilenhöhe ändern können:
quelle
Ich habe Bibliotheken von Drittanbietern wie diese gefunden:
https://github.com/Tuszy/MTLabel
Die einfachste Lösung sein.
quelle
Hier ist ein schneller Code, mit dem Sie den Zeilenabstand programmgesteuert einstellen können
quelle
Natürlich funktioniert Mikes Antwort nicht, wenn Sie die Zeichenfolge programmgesteuert übergeben. In diesem Fall müssen Sie eine zugewiesene Zeichenfolge übergeben und ihren Stil ändern.
quelle