6

画像が添付された属性付きの文字列があります ( NSTextAttachment)。これは問題なく動作しますが、解決できないように見える切り捨ての問題があります。

この例では、文字列##がイメージであるとします。したがって、私の文字列は次のようになりHello world! ##ます。段落スタイルで末尾の切り捨てが設定されています。

ここで、スペースが制限されている場合、テキストは省略記号で切り捨てられます (これが必要です)。残念ながら、画像も切り捨てられています。

したがって、結果は次のようになります。

Hello w...

しかし、私はそれが次のようになりたい:

Hello...##

つまり、画像の添付ファイルが切り捨てられないようにしたいのですが、常に表示されている必要があります。

添付の理由は、画像が常に文字列の最後にあるようにするためです。そのため、テキストが短い場合は画像が最後にあり、テキストが複数行に折り返される場合は、画像を最後に配置することも必要です。終わり。画像を「外側」に手動で配置しようとすると、テキストが正しく切り捨てられないため機能しません。

NSAttributedStringでは、画像を切り捨てないように指示する方法はありますか?

属性付き文字列を生成するコード例:

NSString *title;
NSMutableAttributedString *attributedString;
NSMutableParagraphStyle *paragraph;
NSDictionary *attributes;
NSTextAttachment *attachment;

paragraph = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraph.hyphenationFactor = 1.0;
paragraph.lineBreakMode = NSLineBreakByTruncatingTail;

attributes = @{
    NSForegroundColorAttributeName : [self titleTextColor],
    NSParagraphStyleAttributeName : paragraph,
};

title = @"Hello world!";
attributedString = [[NSMutableAttributedString alloc] initWithString:title
                                                          attributes:attributes];

attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"myImage"];
[attributedString appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
[attachment release];

self.titleLabel.attributedText = attributedString;

[attributedString release];
[paragraph release];

編集:これの重要な部分(上記の説明で少し失われています)は、このソリューションが複数行のテキストで機能する必要があることです。

4

5 に答える 5

3

これは簡単には達成できません。段落スタイルを に設定することもできますがNSLineBreakByTruncatingMiddle、その結果、最後の行が途中で切り捨てられます ( "Hel...rld!##")

したがって、いくつかのオプションがあります。

  • 画像がテキストの最後に配置されないように再設計できます。
  • 文字列の末尾を自分で計算し、それを切り捨てて、テキストの添付ファイルを追加することができますが、これは簡単ではありません。
  • iOS7 の Text Kit を使用して、カスタムの切り捨てロジックを実装します。残念ながら、多くのブログや Apple 自身のドキュメントに誤って書かれているにもかかわらず、UILabelテキストのレンダリングに TextKit を使用せず、CoreText を使用しているため、少し難しくなっています。UILabelを完全に削除してUIView、Text Kit をサポートするカスタム実装を使用することをお勧めします。Text Kit を使用してテキストを描画し、ラベルに似たビューを作成するビューの小さな例をここで見つけることができます。これで、描画されたグリフの境界ボックスを取得し、画像を正しく配置できます。

どちらのオプションも完璧ではありません。最後の行の最後で、画像が何であるか、なぜそれが必要なのかについて言及していません。テキスト キット オプションの実装はそれほど難しくありませんが、おそらくオプション #1 を使用してデザインを少し変更します。

于 2014-04-05T00:38:52.103 に答える
0

UILabel に表示するときに設定しましたか

self.titleLabel.lineBreakMode = NSLineBreakByTruncatingMiddle
于 2014-04-04T23:51:51.693 に答える
0

Hello world!完全な文字列の長さ、切り捨てられた文字列の長さを取得し、新しい NSString をで生成し、差 + 3 を切り捨て、最後に追加する方法があると思います...##

それはあなたの目的に合うでしょうか?

于 2014-04-04T23:02:09.820 に答える