Wie kann ich einen Text unterstreichen, der aus mehreren Zeichenfolgen bestehen kann? Ich finde, einige Leute schlagen UIWebView vor, aber es ist offensichtlich eine zu schwere Klasse, um nur Text zu rendern.
Meine Gedanken waren, den Startpunkt und die Länge jeder Saite in jeder Zeile herauszufinden. Und ziehen Sie entsprechend eine Linie darunter.
Ich habe Probleme, die Länge und den Startpunkt der Zeichenfolge herauszufinden.
Ich habe versucht zu verwenden -[UILabel textRectForBounds:limitedToNumberOfLines:]
, dies sollte die Zeichnungsgrenze für den Text sein, oder? Dann muss ich an der Ausrichtung arbeiten? Wie kann ich den Startpunkt jeder Linie ermitteln, wenn sie mittig und rechtsbündig ist?
Antworten:
Sie können eine Unterklasse von UILabel erstellen und die drawRect-Methode überschreiben:
UPD:
Ab iOS 6 hat Apple die NSAttributedString-Unterstützung für UILabel hinzugefügt. Jetzt ist es viel einfacher und funktioniert für mehrere Zeilen:
Wenn Sie weiterhin iOS 4 und iOS 5 unterstützen möchten, würde ich empfehlen, TTTAttributedLabel zu verwenden, anstatt das Label manuell zu unterstreichen. Wenn Sie jedoch einzeiliges UILabel unterstreichen müssen und keine Komponenten von Drittanbietern verwenden möchten, reicht der obige Code immer noch aus.
quelle
In Swift:
quelle
Das habe ich getan. Es funktioniert wie Butter.
1) Fügen Sie CoreText.framework zu Ihren Frameworks hinzu.
2) Importieren Sie <CoreText / CoreText.h> in die Klasse, in der Sie eine unterstrichene Bezeichnung benötigen.
3) Schreiben Sie den folgenden Code.
quelle
Verwenden Sie eine Attributzeichenfolge:
Und dann überschreiben Sie die Beschriftung - (void) drawTextInRect: (CGRect) aRect und rendern Sie den Text wie folgt:
Oder besser noch, anstatt zu überschreiben, verwenden Sie einfach das von Olivier Halligon erstellte OHAttributedLabel
quelle
NSMutableAttributedString
Ich habe einige der bereitgestellten Antworten kombiniert, um eine bessere (zumindest für meine Anforderungen) UILabel-Unterklasse zu erstellen, die Folgendes unterstützt:
https://github.com/GuntisTreulands/UnderLineLabel
quelle
Personen, die die Ansicht nicht unterordnen möchten (UILabel / UIButton) usw. ... 'compareButton' kann auch durch ein beliebiges Etikett ersetzt werden.
quelle
quelle
Eine andere Lösung könnte (seit iOS 7) einen negativen Wert erhalten
NSBaselineOffsetAttributeName
, zum BeispielNSAttributedString
:Hoffe das wird helfen ;-)
quelle
quelle
Sie können eine benutzerdefinierte Beschriftung mit dem Namen UnderlinedLabel erstellen und die Funktion drawRect bearbeiten.
quelle
Hier ist die einfachste Lösung, die für mich funktioniert, ohne zusätzliche Codes zu schreiben.
quelle
Manchmal stecken wir Entwickler in einem kleinen Design-Teil eines UI-Bildschirms. Eine der irritierendsten Anforderungen ist der Zeilentext. Keine Sorge, hier ist die Lösung.
Unterstreichen eines Textes in einem UILabel mit Ziel C.
Unterstreichen eines Textes in UILabel mit Swift
quelle
Eine erweiterte Version des Codes von Kovpas (Farbe und Liniengröße)
quelle
Ich habe für mehrzeiliges Uilabel mit Unterstreichung erstellt:
Für die Schriftgröße 8 bis 13 setzen Sie int lineHeight = self.font.pointSize + 3;
Für die Schriftgrößen 14 bis 20 setzen Sie int lineHeight = self.font.pointSize + 4;
quelle
Wie kovpas gezeigt hat, können Sie den Begrenzungsrahmen in den meisten Fällen verwenden, obwohl nicht immer garantiert ist, dass der Begrenzungsrahmen genau um den Text passt. Eine Box mit einer Höhe von 50 und einer Schriftgröße von 12 liefert je nach UILabel-Konfiguration möglicherweise nicht die gewünschten Ergebnisse.
Fragen Sie den UIString innerhalb des UILabels ab, um die genauen Metriken zu ermitteln, und verwenden Sie diese, um Ihre Unterstreichung unabhängig vom umschließenden Begrenzungsrahmen oder Rahmen mithilfe des bereits von kovpas bereitgestellten Zeichnungscodes besser zu platzieren.
Sie sollten sich auch die "führende" Eigenschaft von UIFont ansehen, die den Abstand zwischen Baselines basierend auf einer bestimmten Schriftart angibt. In der Grundlinie soll Ihre Unterstreichung gezeichnet werden.
Suchen Sie nach den UIKit-Ergänzungen zu NSString:
quelle
Ich verwende eine Open-Source-Zeilenansicht und habe sie gerade zu den Schaltflächenunteransichten hinzugefügt:
Dies wurde von Karim oben inspiriert.
quelle
Basierend auf den Antworten von Kovpas & Damien Praca finden Sie hier eine Implementierung von UILabelUnderligned, die auch textAlignemnt unterstützt .
und die Umsetzung:
quelle
Hier ist eine andere, einfachere Lösung (die Breite der Unterstreichung ist nicht genau, aber für mich gut genug)
Ich habe eine UIView mit weißem
(_view_underline)
Hintergrund und einer Höhe von 1 Pixel und aktualisiere ihre Breite jedes Mal, wenn ich den Text aktualisierequelle
NSUnderlineStyleAttributeName, der eine NSNumber (wobei 0 keine Unterstreichung ist) verwendet, kann einem Attributwörterbuch hinzugefügt werden. Ich weiß nicht, ob das einfacher ist. Aber für meine Zwecke war es einfacher.
quelle
Swift 4.1 ver:
quelle
Sie können dies mein benutzerdefiniertes Etikett verwenden! Sie können den Interface Builder auch zum Festlegen verwenden
quelle