Ich versuche, einen Textausschnitt zu erhalten, der in HTML formatiert ist, um in einer UITableViewCell auf einem iPhone gut angezeigt zu werden.
Bisher habe ich Folgendes:
NSError* error;
NSString* source = @"<strong>Nice</strong> try, Phil";
NSMutableAttributedString* str = [[NSMutableAttributedString alloc] initWithData:[source dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
documentAttributes:nil error:&error];
Diese Art von Arbeiten. Ich bekomme einen Text mit der Aufschrift "Nice" in Fettdruck! Aber ... es setzt auch die Schriftart auf Times Roman! Dies ist nicht die Schriftart, die ich möchte. Ich denke, ich muss etwas in den documentAttributes festlegen, aber ich kann nirgendwo Beispiele finden.
html
ios
nsattributedstring
phil
quelle
quelle
Antworten:
Swift 2- Version, basierend auf der Antwort von Javier Querol
Swift 3.0 und iOS 9+
Swift 5 und iOS 11+
quelle
font-family: '-apple-system', 'HelveticaNeue';
(was funktioniert und auch abwärtskompatibel ist). Wenn Sie nur iOS9 unterstützen,font-family: -apple-system;
kann verwendet werdencolor: #000000
. Fügen Sie dem Stilattribut einfach Farbe mit einem Wert im Hex-Zeichenfolgenformat hinzu . Siehe diesen Link zum Konvertieren von UIColor in Hex-Zeichenfolge: gist.github.com/yannickl/16f0ed38f0698d9a8ae7Auf diese Weise müssen Sie nicht angeben, welche Schriftart Sie möchten, sondern die Schriftart und -größe des Etiketts.
quelle
NSUnicodeStringEncoding
und codieren Daten dann zurück in Zeichen mitNSUTF8StringEncoding
. Ist es o.k?Ich habe tatsächlich eine funktionierende Lösung für dieses Problem gefunden:
Ändern Sie die Schriftart in Ihrer HTML-Antwortzeichenfolge, bevor sie analysiert wird.
Beispiel:
Schnelle Version:
quelle
Herausgefunden. Ein bisschen wie ein Bär und vielleicht nicht die beste Antwort.
Dieser Code durchläuft alle Änderungen an der Schriftart. Ich weiß, dass für die Schriftarten "Times New Roman" und "Times New Roman BoldMT" verwendet werden. Trotzdem werden die fett gedruckten Schriftarten gefunden und ich kann sie zurücksetzen. Ich kann die Größe auch zurücksetzen, während ich dabei bin.
Ich hoffe / denke ehrlich, dass es einen Weg gibt, dies zur Analysezeit einzurichten, aber ich kann es nicht finden, wenn es einen gibt.
quelle
Ein allgemeinerer Ansatz besteht darin, die Schriftmerkmale beim Aufzählen zu betrachten und eine Schriftart mit denselben Merkmalen (fett, kursiv usw.) zu erstellen:
quelle
Ja, es gibt eine einfachere Lösung. Stellen Sie die Schriftart in der HTML-Quelle ein!
Hoffe das hilft.
quelle
Swift 4+ Update der UILabel- Erweiterung
iOS 9+
quelle
Die Antworten funktionieren vor allem in Ordnung, wenn Sie die Konvertierung gleichzeitig mit dem Erstellen der durchführen
NSAttributedString
. Aber ich denke, eine bessere Lösung, die an der Zeichenfolge selbst funktioniert und daher keinen Zugriff auf die Eingabe benötigt, ist die folgende Kategorie:Benutzen als:
Funktioniert unter iOS 7+
quelle
Verbesserung von Victors Lösung, einschließlich Farbe:
Damit dies funktioniert, benötigen Sie auch YLColor.swift der Umwandlung von Uicolor in Hex https://gist.github.com/yannickl/16f0ed38f0698d9a8ae7
quelle
Die Verwendung von NSHTMLTextDocumentType ist langsam und schwer zu steuernde Stile. Ich empfehle Ihnen, meine Bibliothek mit dem Namen Atributika auszuprobieren. Es hat einen eigenen sehr schnellen Parser. Sie können auch beliebige Tag-Namen haben und einen beliebigen Stil für sie definieren.
Beispiel:
Sie finden es hier https://github.com/psharanda/Atributika
quelle
Ich habe alle Antworten zusammengefügt und zwei Erweiterungen erstellt, mit denen eine Beschriftung mit HTML-Text festgelegt werden kann. Einige der obigen Antworten haben die Schriftfamilie in den zugewiesenen Zeichenfolgen nicht richtig interpretiert. Andere waren für meine Bedürfnisse unvollständig oder scheiterten auf andere Weise. Lassen Sie mich wissen, ob ich mich verbessern soll.
Ich hoffe das hilft jemandem.
quelle
UILabel
und funktioniertUITextView
. Vielen Dank!Vielen Dank für die Antworten, die Erweiterung hat mir sehr gut gefallen, aber ich habe noch nicht auf Swift umgestellt. Für die alten Schüler, die sich noch in Ziel C befinden, sollte dies ein wenig helfen: D.
Viel Spaß beim Codieren! - Greg Frame
quelle
Swift 3 String-Erweiterung mit einer Null-Schriftart. Die Eigenschaft ohne Schriftart stammt aus einer anderen SO-Frage. Erinnern Sie sich nicht an welche :(
quelle
Hier ist eine Erweiterung für NSString, die mit Objective-C einen NSAttributedString zurückgibt.
Es behandelt eine Zeichenfolge mit HTML-Tags korrekt und legt die gewünschte Schriftart und Schriftfarbe fest, wobei HTML-Tags wie BOLD, ITALICS ... beibehalten werden.
Das Beste ist, dass zum Festlegen der Schriftattribute keine HTML-Markierungen erforderlich sind.
quelle
Tatsächlich gibt es einen noch einfacheren und saubereren Weg. Legen Sie einfach die Schriftart fest, nachdem Sie den HTML-Code analysiert haben:
quelle