NSAttributedString e estilo html (alinhamento de marcadores)

No meu aplicativo iOS, estou usando o NSAttributedString para gerar uma lista de marcadores. Infelizmente, estou lutando para fazer as balas parecerem apresentáveis. Minha primeira tentativa foi usar texto regular e um caractere unicode para os marcadores, basicamente usando uma string como esta:

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"
)

O resultado foi o seguinte:

Gosto da aparência dos marcadores, mas o texto que transborda no último marcador deve estar alinhado com a linha anterior e não consegui descobrir como conseguir isso com texto simples (sem aplicar o mesmo alinhamento ao parágrafo acima).

Minha segunda tentativa foi usar html em NSAttributedString via NSHTMLTextDocumentType e usar<ul> e<li> elementos para gerar as balas.

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
)

Isso corrigiu o primeiro problema, mas introduziu um novo:

As marcações agora estão espaçadas demais (tanto na borda esquerda quanto no texto à direita). Tentei usar os truques típicos de html / css para corrigir o alinhamento (<li style="text-indent: -10px;">), mas esses estilos parecem ser ignorados por NSAttributedString.

Tentei remediar isso com um NSMutableParagraphStyle adicional, mas parece causar mais mal do que bem. Aqui está o que eu tentei:

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

E aqui está o que eu tenho:

Como você pode ver, isso só piorou as coisas, aqui estão meus problemas:

Ele compensa a 2ª linha, mas eu só quero esse efeito para os marcadores, não o parágrafo anterior (acho que posso remediar isso diminuindo o intervalo sobre o qual o efeito é aplicado)Eu tenho que adivinhar / codificar o deslocamento, no meu exemplo eu escolhi 20 e isso não foi suficiente para os marcadores, dadas as configurações de fonte atuais, que poderiamPor alguma razão, o espaçamento entre marcadores é ainda mais estendido agora sem nenhuma razão, parece que apenas aplicar um NSParagraphStyle de baunilha sem fazer nada faz isso e não vejo opção para corrigir isso.

Tudo o que eu realmente quero é que o espaçamento entre marcadores seja parecido com a primeira captura de tela, enquanto o recuo de estouro da segunda linha se pareça com a segunda sem precisar codificar as posições exatas dos pixels. Vocês poderiam me ajudar?

obrigado

questionAnswers(2)

yourAnswerToTheQuestion