Swift - Ändern Sie die schriftart in einem HTML-string, der hat seinen eigenen Stile
Ich bin dinamically immer eine HTML-Zeichenfolge aus einer WordPress-API und analysieren es in ein Attributiertes Zeichenfolge, um es in mein app. Da der string hat seine eigenen Stile, es zeigt verschiedene Schriftarten und-Größen, etwas, das Auswirkungen auf unsere design-Entscheidungen.
Was ich tun möchten, ist ändern Sie den schriftart und seine Größe auf der ganzen zugeschrieben string.
Ich habe versucht zu tun, so dass in den Optionen der zugeordneten Zeichenfolge, aber es tut sich nix:
let attributedT = try! NSAttributedString(
data: nContent!.decodeHTML().data(using: String.Encoding.unicode, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSFontAttributeName: UIFont(name: "Helvetica", size: 16.0)!],
documentAttributes: nil)
contentLbl.attributedText = attributedT
Hat jemand irgendwelche Ideen auf, wie dies zu erreichen?
P. S. ich weiß, dass ich könnte hinzufügen, ein CSS-tag, um den Anfang oder das Ende der Zeichenfolge, aber würde diese Vorrang vor anderen Stilen? Auch, wenn dies eine gültige Lösung, könnten Sie bitte ein Beispiel, wie es zu tun?
NSAttributedString(data:options:documentAttributes:)
besagt, dass Sie können nicht NSFontAttributeName
im options
, es wird nicht gelesen werden. Das ist, warum Sie den code nicht tut, was Sie erwarten.InformationsquelleAutor Jacobo Koenig | 2017-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den setAttributes zurücksetzen, werden alle Attribute aus HTML. Ich schrieb eine Erweiterung Methode, dies zu vermeiden:
Swift 4
Probe:
vielen Dank für den Hinweis auf diesen Fehler. Aktualisiert.
Ich sehe das gleiche Protokoll (richtigen font-family, font-Typ etc), wie Sie hier erwähnt, aber wenn ich attr, UILabel, es funktioniert nicht.
InformationsquelleAutor bubuxu
Was Sie tun möchten, ist im Grunde genommen drehen Sie den NSAttributedString in eine NSMutableAttributedString.
Rufen Sie nun
addAttributes
Attribute angewendet, wie ein andere schriftart, über jeden gewünschten Bereich, wie Sie die ganze Sache.Jedoch leider eine schriftart ohne ein symbolischer Charakterzug, wie Kursiv ist ein andere schriftart aus einer schriftart mit dieser symbolischen Eigenschaft. Also, Sie gehen zu müssen, um ein Dienstprogramm, das kopiert die bestehende symbolische Merkmale, die vom Schrift-und wendet Sie auf eine andere schriftart:
Okay, also, bewaffnet mit diesem Dienstprogramm, lass es uns versuchen. Ich werde beginnen mit einigen einfachen HTML-und konvertieren es in ein zugeschrieben Zeichenfolge, so wie Sie tun:
Wie Sie sehen können, habe ich in eine NSMutableAttributedString, wie ich riet. Jetzt werde ich Zyklus durch den Stil führt in Bezug auf schriftart ändern, um eine andere schriftart während der Verwendung meiner Dienstprogramm gelten die bisherigen Merkmale:
Hier ist das Ergebnis:
Natürlich könnten Sie zwicken Sie dieses Verfahren, um noch anspruchsvollere, je nach Ihren design-Anforderungen.
Richtig, ich meinte
addAttributes
. Ist jetzt behoben. Danke für den Fang.Okay, meine Feste Antwort so, dass es tatsächlich funktioniert. 🙂
Ich bin mit dieser Methode. Ich bin vor ein Problem. Wann immer ich übergeben Sie eine benutzerdefinierte schriftart Hinzugefügt in meine app: lass f2 = UIFont(name:"Georgia", Größe:20)! . Font-style funktioniert nicht, aber die Größe funktioniert. Es arbeitet mit den anderen font-Familien, die in xcode.
Wenn Sie eine Frage haben, Fragen Sie einen Frage von.
InformationsquelleAutor matt
Swift 4 Lösung
NSAttributedString
Erweiterung mit Komfort-InitialisiererUIFont
UIFont
, @sieheuseDocumentFontSize
parameterguard
Anweisung- Nutzung-1 (Schriften Ersetzen)
Nutzung-2 (
NSMutableAttributedString
Beispiel)- Nutzung-3 (Nur konvertieren von HTML in NSAttributedString)
'DocumentReadingOptionKey' is unavailable in Swift
. Haben Sie ersetzt es mit etwas anderes, da Sie dann? Google Suche dreht nichts.Wie bereits erwähnt Swift 4-Lösung (siehe erste Zeile), und Sie sind mittels Swift-3.x, überprüfen Sie bitte meine neue Antwort für eine Swift 3 entspricht
Danke für die Antwort. Ich habe nur gefragt, da ging ich auf "Projekt" -> "Build-Einstellungen" -> "Swift-Sprachen" - version, und es sagt 4. Muss ein anderes Thema, obwohl.
InformationsquelleAutor AamirR
Swift 3 version von meinem vorherigen Swift (4) Lösung
vielen Dank für die schnelle und genaue Antwort.. ich war auf der Suche für diese eine Menge.
Froh, dass es geholfen hat!
InformationsquelleAutor AamirR
InformationsquelleAutor Rohan Dave