15

文字列の異なる部分に左揃えと右揃えを追加することは可能ですか?

右側の部分に配置属性を追加しようとしました:

    NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init];
    [paragrahStyle setAlignment:NSTextAlignmentRight];
    [mutableAttributedString addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:rangeOfDate];

ただし、文字列全体が左に揃えられます。

4

2 に答える 2

9

@Verglasの答えに基づいて...

通常、HTML でこのようなことを行う方法は、フローティングを使用することです。 このようなもの: :

<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];

残念ながら、うまくいきません。

2 回目の試行として、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 は iOS の公開 API ではありませんが、NSAttributedString initWithData:options:documentAttributes:error: はこれを使用して、属性付きの文字列を HTML から生成しました。手作業で NSAttributedString を構築できないことを意味するため、これは苦痛です (この API を使用して HTML から生成する必要があります)。

HTML から属性付き文字列を作成するのは遅く、ほとんど文書化されていません。私はできる限りそれを避けます。

于 2014-08-27T22:20:35.950 に答える