Ist es möglich, die Lücke zwischen Text zu verringern, wenn mehrere Zeilen in a UILabel
eingefügt werden? Wir können den Rahmen, die Schriftgröße und die Anzahl der Zeilen einstellen. Ich möchte die Lücke zwischen den beiden Zeilen in diesem Etikett verringern.
objective-c
swift
xcode
uilabel
line-spacing
Abhinav
quelle
quelle
UILabel
und binden Sie dann alle Beschriftungen in a einStackView
. Zum Schluss stellen Sie diespacing
von einStackView
. Denken Sie daran, sie vertikal zu stapeln.Antworten:
Ich habe darüber nachgedacht, dieser Antwort etwas Neues hinzuzufügen, damit ich mich nicht so schlecht fühle ... Hier ist eine schnelle Antwort:
"Kurze Antwort: Sie können nicht. Um den Abstand zwischen Textzeilen zu ändern, müssen Sie UILabel unterordnen und Ihr eigenes drawTextInRect rollen oder mehrere Beschriftungen erstellen."Siehe: UILabel-Zeilenabstand festlegen
Dies ist eine wirklich alte Antwort, und andere haben bereits die neue und bessere Möglichkeit hinzugefügt, damit umzugehen. Bitte beachten Sie die aktuellen Antworten unten.quelle
NSAttributedString
(auch in den Eigenschaften von UILable im Xcode Interface Builder verfügbar).NSParagraphStyle
wenn Sie eine verwendenNSAttributedString
. (Ich muss möglicherweise mehr Tests der anderen modifizierbaren Eigenschaften durchführen, aber dielineSpacing
Eigenschaft erlaubt Ihnen nur, sie zu erhöhen.)In Xcode 6 können Sie dies im Storyboard tun:
quelle
Ab iOS 6 können Sie dem UILabel eine zugewiesene Zeichenfolge zuweisen. Überprüfe das Folgende :
quelle
attributedString
muss einNSMutableAttributedString
(NICHT NSAttributedString) seinNSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
lineSpacing
Eigenschaft vonNSMutableParagraphStyle
ist niemals negativ, daher kann die Linienhöhe mit diesem Ansatz nicht verringert werden. Um die Frage zu beantworten, müssen Sie eine andere Eigenschaft verwenden, siehe @ d.ennis Antwort.Die hier genannten Lösungen haben bei mir nicht funktioniert. Ich habe einen etwas anderen Weg gefunden, dies mit dem iOS 6 NSAttributeString zu tun:
quelle
Ich habe diese einfache Erweiterung gemacht, die für mich sehr gut funktioniert:
Kopieren Sie dies in eine Datei, damit Sie es so verwenden können
quelle
lineSpacing
Einstellung nicht einfach direkt ein und vergessen sielineHeightMultiple
?.lineSpacing = 1.4
und alles vergessen.lineHeightMultiple
...Vom Interface Builder (Storyboard / XIB):
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
In iOS 6 gibt es jetzt eine alternative Antwort, bei der attributedText auf dem Etikett mithilfe eines NSAttributedString mit den entsprechenden Absatzstilen festgelegt wird. In dieser Antwort zum Stapelüberlauf finden Sie Details zur Zeilenhöhe mit NSAttributedString:
Kerntext - NSAttributedString Zeilenhöhe richtig gemacht?
quelle
Hier ist eine Klasse der Unterklasse UILabel mit der Eigenschaft Zeilenhöhe: https://github.com/LemonCake/MSLabel
quelle
In Swift und als Funktion, inspiriert von DarkDust
quelle
Laut der Antwort von @Mike
lineHeightMultiple
ist das Reduzieren von der entscheidende Punkt. Beispiel unten, es funktioniert gut für mich:quelle
SWIFT 3 nützliche Erweiterung, um den Abstand zwischen Zeilen einfacher einzustellen :)
quelle
Ich habe einen Weg gefunden, wie Sie die tatsächliche Zeilenhöhe festlegen können (kein Faktor) und sie sogar live in Interface Builder rendert . Folgen Sie einfach den Anweisungen unten. Code ist in Swift 4 geschrieben .
Schritt 1: Erstellen Sie eine Datei mit dem Namen
DesignableLabel.swift
und fügen Sie den folgenden Code ein:Schritt 2: Platzieren Sie a
UILabel
in einem Storyboard / XIB und setzen Sie seine Klasse aufDesignableLabel
. Warten Sie, bis Ihr Projekt erstellt ist (der Build muss erfolgreich sein!).Schritt 3: Jetzt sollte im Eigenschaftenbereich eine neue Eigenschaft mit dem Namen "Linienhöhe" angezeigt werden. Stellen Sie einfach den gewünschten Wert ein und Sie sollten die Ergebnisse sofort sehen!
quelle
Hier ist eine Unterklasse von UILabel, die festlegt
lineHeightMultiple
und sicherstellt, dass die Eigenhöhe groß genug ist, um keinen Text abzuschneiden.quelle
In Swift 2.0 ...
Fügen Sie eine Erweiterung hinzu:
Legen Sie jetzt einfach Ihr UILabel als attributedText fest:
Offensichtlich habe ich eine Reihe von Parametern hinzugefügt, die Sie möglicherweise nicht benötigen. Spielen Sie herum - zögern Sie nicht, die Methode neu zu schreiben - ich habe nach einer Reihe verschiedener Antworten gesucht, also dachte ich mir, ich würde die gesamte Erweiterung posten, falls es jemandem da draußen hilft ... -rab
quelle
Swift3 - Fügen Sie in einer UITextView- oder UILabel-Erweiterung diese Funktion hinzu:
Ich habe Code hinzugefügt, um den aktuell zugeordneten Text beizubehalten, wenn Sie bereits zugeordnete Zeichenfolgen für die Ansicht verwenden (anstatt sie zu überschreiben).
quelle
Eine andere Antwort ... Wenn Sie die Zeichenfolge programmgesteuert übergeben, müssen Sie eine zugewiesene Zeichenfolge anstelle einer regulären Zeichenfolge übergeben und ihren Stil ändern. (IOS10)
quelle
Swift 3-Erweiterung:
quelle
Dies sollte dabei helfen. Anschließend können Sie diese Beschriftung dieser benutzerdefinierten Klasse im Storyboard zuweisen und ihre Parameter direkt in den Eigenschaften verwenden:
quelle
Swift 4 Label-Erweiterung. Erstellen von NSMutableAttributedString vor der Übergabe an die Funktion, falls für den zugeordneten Text zusätzliche Attribute erforderlich sind.
quelle
Dieser Code hat bei mir funktioniert (ios 7 & ios 8 sicher).
quelle
Hier ist meine Lösung in Kürze. Die Unterklasse sollte sowohl für die Eigenschaft attributeText und text als auch für characterSpacing + lineSpacing funktionieren. Der Abstand bleibt erhalten, wenn eine neue Zeichenfolge oder ein neuer Attributstring festgelegt wird.
quelle
Als schnelle, schmutzige, intelligente und einfache Problemumgehung:
Für UILabels, die nicht viele Zeilen haben, können Sie stattdessen stackViews verwenden.
Spacing
von der StackView auf die gewünschte MengeStellen Sie sicher, dass Sie sie vertikal stapeln . Diese Lösung funktioniert auch für benutzerdefinierte Schriftarten.
quelle