Sulla @ risposta di Verglas ...
Il modo che normalmente si fa qualcosa di simile in HTML è via galleggiante. Something like this::
<div><p style='float: left;'>Left</p><p style='float: right;'>Right</p><div style='clear: both;'></div></div>
Sarebbe bello se si potesse trasformare questo in un NSAttributedString e farlo funzionare:
NSString* html = @"<div><p style='float: left;'>Left</p><p style='float: right;'>Right</p><div style='clear: both;'></div></div>";
NSData* d = [html dataUsingEncoding: NSUTF8StringEncoding];
NSAttributedString* as = [[NSMutableAttributedString alloc] initWithData: d
options: @{
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute : @(NSUTF8StringEncoding)
}
documentAttributes: nil
error: nil];
Purtroppo, non funziona.
per un secondo tentativo, si può provare a utilizzare una tabella HTML:
html = @"<table style='width:100%'><tr><td>Left</td><td style='text-align:right;'>Right</td></tr></table>";
Curiosamente, questo funziona come previsto. La cosa ancora più curiosa sono gli attributi che genera:
2014-08-27 14:27:31.443 testParagraphStyles[2095:60b] range: {0, 5} attributes: {
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n \"<NSTextTableBlock: 0x8d9c920>\"\n), Lists (null), BaseWritingDirection 0, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0";
2014-08-27 14:27:31.444 testParagraphStyles[2095:60b] range: {5, 6} attributes: {
NSParagraphStyle = "Alignment 2, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n \"<NSTextTableBlock: 0x8da1550>\"\n), Lists (null), BaseWritingDirection 0, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0";
}
Scorrere a destra e notare il riferimento a NSTextTableBlock. NSTextTable non è un'API pubblica su iOS, ma NSAttributoString initWithData: options: documentAttributes: error: utilizzato per generare la stringa attribuita da HTML. Ciò è doloroso perché significa che non possiamo costruire manualmente una NSAttribuitString (dobbiamo generarlo da HTML usando questa API).
La creazione di stringhe attribuite da HTML è lenta e in gran parte non documentata. Lo evito ogni volta che posso.
Fresco e davvero utile! – zetachang
Sono confuso perché, se rimuovo tutti gli attributi oltre a NSParagraphStyleAttributeName, che interrompe la formattazione. È un errore o sto fraintendendo qualcosa? – TomSwift
Sì, sembra un bug per me. L'ho trovato mentre facevo questo: http: // StackOverflow.it/questions/24434552/nstextalignmentcenter-and-nstextalignmentright-are-the-wrong-way-round-in-nstext – jowie