Ich verwende eine Instanz von UIWebView
, um Text zu verarbeiten und ihn korrekt zu färben. Er gibt das Ergebnis als HTML aus, aber anstatt es in dem anzuzeigen, in dem UIWebView
ich es Core Text
mit einem anzeigen möchte NSAttributedString
.
Ich kann das erstellen und zeichnen NSAttributedString
, bin mir aber nicht sicher, wie ich den HTML-Code konvertieren und in die zugewiesene Zeichenfolge abbilden kann.
Ich verstehe, dass unter Mac OS X NSAttributedString
eine initWithHTML:
Methode hat, aber dies war eine Ergänzung nur für Mac und ist nicht für iOS verfügbar.
Ich weiß auch, dass es eine ähnliche Frage gibt, aber sie hatte keine Antworten. Ich würde jedoch erneut versuchen, herauszufinden, ob jemand einen Weg gefunden hat, dies zu tun, und wenn ja, ob er sie teilen könnte.
Antworten:
In iOS 7 hat UIKit eine
initWithData:options:documentAttributes:error:
Methode hinzugefügt,NSAttributedString
mit der HTML mithilfe von HTML initialisiert werden kann, z.In Swift:
quelle
Zu NSAttributedString von Oliver Drobnik bei Github gibt es eine Open-Source-Erweiterung in Arbeit . Es verwendet NSScanner für die HTML-Analyse.
quelle
Das Erstellen eines NSAttributedString aus HTML muss im Hauptthread erfolgen!
Update: Es stellt sich heraus, dass das HTML-Rendering von NSAttributedString von WebKit unter der Haube abhängt und im Hauptthread ausgeführt werden muss . Andernfalls stürzt die App gelegentlich mit einem SIGTRAP ab .
Neues Relic-Absturzprotokoll:
Unten finden Sie eine aktualisierte thread-sichere Swift 2 String-Erweiterung:
Verwendung:
Ausgabe:
quelle
Schnelle Initialisierungserweiterung auf NSAttributedString
Meine Neigung war es, dies
NSAttributedString
eher als Erweiterung als als hinzuzufügenString
. Ich habe es als statische Erweiterung und als Initialisierer versucht. Ich bevorzuge den Initialisierer, den ich unten aufgeführt habe.Swift 4
Swift 3
Beispiel
quelle
guard ... NSMutableAttributedString(data:...
durchtry self.init(data:...
(und fügen Siethrows
es dem Init hinzu)Dies ist eine
String
Erweiterung, die in Swift geschrieben wurde, um eine HTML-Zeichenfolge als zurückzugebenNSAttributedString
.Benutzen,
Oben habe ich absichtlich einen Unicode \ u2022 hinzugefügt, um zu zeigen, dass er Unicode korrekt wiedergibt.
Ein Trivial: Die Standardcodierung, die
NSAttributedString
verwendet wird , istNSUTF16StringEncoding
(nicht UTF8!).quelle
Nehmen Sie einige Änderungen an Andrews Lösung vor und aktualisieren Sie den Code auf Swift 3:
Dieser Code verwendet jetzt UITextView als
self
und kann seine ursprüngliche Schriftart, Schriftgröße und Textfarbe erbenHinweis:
toHexString()
ist eine Erweiterung von hierAnwendungsbeispiel:
quelle
Swift 3.0 Xcode 8 Version
quelle
Swift 4
Verwendung
quelle
Die einzige Lösung, die Sie derzeit haben, besteht darin, den HTML-Code zu analysieren, einige Knoten mit bestimmten Attributen point / font / etc aufzubauen und sie dann zu einem NSAttributedString zu kombinieren. Es ist viel Arbeit, aber wenn es richtig gemacht wird, kann es in Zukunft wiederverwendbar sein.
quelle
Die obige Lösung ist korrekt.
Aber die App wird abstürzen, wenn Sie sie auf ios 8.1.2 oder 3 ausführen.
Um den Absturz zu vermeiden, können Sie Folgendes tun: Führen Sie dies in einer Warteschlange aus. Damit es immer am Hauptfaden ist.
quelle
Die Verwendung von NSHTMLTextDocumentType ist langsam und es ist schwierig, Stile zu steuern. Ich empfehle Ihnen, meine Bibliothek mit dem Namen Atributika auszuprobieren. Es hat einen eigenen sehr schnellen HTML-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
Swift 3 :
Versuchen Sie Folgendes :
Und für die Verwendung:
quelle
Hilfreiche Erweiterungen
Angeregt durch diesen Thread, eine Hülse, und Erica Sadun des ObjC Beispiel in iOS Gourmet - Kochbuch S.80, schrieb ich eine Erweiterung auf
String
undNSAttributedString
gehe hin und her zwischen HTML Plain-Strings und NSAttributedStrings und umgekehrt - auf GitHub hier , die Ich habe hilfreich gefunden.Die Signaturen sind (wieder vollständiger Code in einem Gist, Link oben):
quelle
mit Schriftart
Alternativ können Sie die Versionen verwenden, von denen dies abgeleitet wurde, und die Schriftart auf UILabel festlegen, nachdem attribatedString festgelegt wurde
quelle
Durch die integrierte Konvertierung wird die Textfarbe immer auf UIColor.black festgelegt, auch wenn Sie ein Attributwörterbuch übergeben, bei dem .forgroundColor auf etwas anderes festgelegt ist. Probieren Sie diese Version der Erweiterung unter NSAttributedString aus, um den DARK-Modus unter iOS 13 zu unterstützen.
quelle