NSAttributedString und HTML-Stil (Aufzählungszeichenausrichtung)

In meiner iOS-App benutze ich NSAttributedString, um eine Liste mit Aufzählungszeichen zu erstellen. Leider habe ich Probleme damit, die Kugeln präsentabel aussehen zu lassen. Mein erster Versuch war, normalen Text und ein Unicode-Zeichen für die Aufzählungszeichen zu verwenden, im Grunde genommen mit einer Zeichenfolge wie dieser:

var attributedString = NSMutableAttributedString(
    string: "Here is a list of bullets and a paragraph introducing them, note that this paragraph spans multiple lines\n" +
    "• This is the first bullet\n" +
    "• Here is a second bullet\n" +
    "• And here is a third bullet with a lot of text such that it overflows to the next line"
)

Das Ergebnis war:

Ich mag, wie die Aufzählungszeichen aussehen, aber der überlaufende Text im letzten Aufzählungszeichen sollte an der vorherigen Zeile ausgerichtet sein, und ich konnte nicht herausfinden, wie dies mit einfachem Text erreicht werden kann (ohne dieselbe Ausrichtung auf den obigen Absatz anzuwenden).

Mein zweiter Versuch war, HTML in NSAttributedString über NSHTMLTextDocumentType zu verwenden und @ zu verwende<ul> und<li> Elemente, um die Aufzählungszeichen zu generieren.

let content = "Here is a list of bullets and a paragraph introducing them, note that this paragraph spans multiple lines" +
    "<ul>" +
         "<li>This is the first bullet</li>" +
         "<li>Here is a second bullet</li>" +
         "<li>And here is a third bullet with a lot of text such that it overflows to the next line</li>" +
    "</ul>"
var attributedString = try! NSMutableAttributedString(
    data: content,
    options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
    documentAttributes: nil
)

Das hat das erste Problem behoben, aber ein neues eingeführt:

Die Aufzählungszeichen sind jetzt zu weit voneinander entfernt (sowohl vom linken Rand als auch vom Text auf der rechten Seite). Ich habe versucht, die typischen HTML- / CSS-Tricks zu verwenden, um die Ausrichtung zu korrigieren <li style="text-indent: -10px;">) aber diese Stile scheinen von NSAttributedString ignoriert zu werden.

Ich habe versucht, dies mit einem zusätzlichen NSMutableParagraphStyle zu beheben, aber es scheint mehr zu schaden als zu nützen. Folgendes habe ich versucht:

var paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.firstLineHeadIndent = 0
paragraphStyle.headIndent = 20
attributedString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: attributedStringRange)

Und hier ist was ich habe:

ie Sie sehen können, hat es die Dinge nur verschlimmert, hier sind meine Probleme dami

Es versetzt die 2. Zeile, aber ich möchte diesen Effekt nur für die Aufzählungszeichen, nicht für den vorherigen Absatz (ich schätze, ich kann das beheben, indem ich den Bereich verkleinere, in dem der Effekt angewendet wird)Ich muss den Versatz erraten / hartcodieren, in meinem Beispiel habe ich 20 gewählt und das war nicht genug für die Aufzählungszeichen angesichts der aktuellen Schriftarteinstellungen, die sich ändern könnte Aus irgendeinem Grund ist der Aufzählungszeichenabstand jetzt ohne Grund noch weiter gestreckt. Es scheint, als würde man einfach einen Vanille-NSParagraphStyle anwenden, ohne etwas zu tun, und ich sehe keine Möglichkeit, dies zu beheben.

Alles, was ich wirklich möchte, ist, dass mein Aufzählungszeichenabstand dem ersten Screenshot ähnelt, während der Überlaufeinzug für die zweite Zeile wie die zweite Zeile aussieht, ohne dass genaue Pixelpositionen fest codiert werden müssen. Könnt ihr mir helfen?

Vielen Dan

Antworten auf die Frage(4)

Ihre Antwort auf die Frage