Опираясь на @ ответ Verglas в ...
так, как вы обычно делаете что-то подобное в HTML осуществляется с помощью плавающей. Something like this::
<div><p style='float: left;'>Left</p><p style='float: right;'>Right</p><div style='clear: both;'></div></div>
Было бы здорово, если бы вы могли бы превратить это в NSAttributedString и он работает:
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];
К сожалению, это не работает.
Для второй попытки, мы можем попытаться использовать таблицу HTML:
html = @"<table style='width:100%'><tr><td>Left</td><td style='text-align:right;'>Right</td></tr></table>";
Любопытно, что это работает, как предполагалось. Что еще более интересно, являются атрибутами он генерирует:
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";
}
Прокрутка вправо и обратите внимание на ссылку на NSTextTableBlock. NSTextTable не является общедоступным API для iOS, но NSAttributedString initWithData: options: documentAttributes: error: используется для генерации нашей атрибутной строки из HTML. Это больно, потому что это означает, что мы не можем вручную создать NSAttributedString (мы должны сгенерировать его из HTML с помощью этого API).
Строение атрибутированных строк из HTML является медленным и в значительной степени недокументированным. Я избегаю этого, когда могу.
Прохладный и очень полезный! – zetachang
Я смущен, почему, если я удалю все атрибуты помимо NSParagraphStyleAttributeName, это приведет к разрыву форматирования. Это ошибка или я что-то не понимаю? – TomSwift
Да, звучит как ошибка для меня. Я столкнулся с этим, выполняя это: http: // stackoverflow.com/questions/24434552/nstextalignmentcenter-and-nstextalignmentright-are-the-wrong-way-round-in-nstext – jowie