Aufbauend auf @ Verglas Antwort ...
Die Art und Weise Sie in der Regel etwas tun würde, wie dies in HTML ist über schwimmen. Something like this::
<div><p style='float: left;'>Left</p><p style='float: right;'>Right</p><div style='clear: both;'></div></div>
Es wäre toll, wenn Sie diese in eine NSAttributedString verwandeln könnte und haben es:
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];
Leider funktioniert es nicht.
Für einen zweiten Versuch, können wir versuchen, eine HTML-Tabelle:
html = @"<table style='width:100%'><tr><td>Left</td><td style='text-align:right;'>Right</td></tr></table>";
Merkwürdiger, das funktioniert wie vorgesehen. Was ist noch neugieriger sind die Attribute, es erzeugt:
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";
}
Blättern Sie nach rechts und beachten Sie den Hinweis auf NSTextTableBlock. NSTextTable ist keine öffentliche API unter iOS, sondern NSAttributedString initWithData: options: documentAttributes: error: verwendet, um unsere attributierte Zeichenfolge aus HTML zu generieren. Dies ist sehr schmerzhaft, da es bedeutet, dass wir einen NSAtributedString nicht manuell erstellen können (wir müssen ihn für HTML mithilfe dieser API generieren).
Der Aufbau attributierter Strings aus HTML ist langsam und weitgehend undokumentiert. Ich vermeide es, wann immer ich kann.
Cool und wirklich hilfreich! – zetachang
Ich bin verwirrt, warum, wenn ich alle Attribute neben NSParagraphStyleAttributeName entfernen, dass es die Formatierung bricht. Ist das ein Fehler oder missverstehe ich etwas? – TomSwift
Ja, klingt wie ein Fehler für mich. Ich bin dabei gestolpert: http: // stackoverflow.com/questions/24434552/nstextalignmentcenter-und-nstextalignmentright-sind-die-falsche-weg-round-in-nstext – jowie