0

私はこの文字列を表示しています(区切りに注意してください):

CONSEJO
NACIONAL
PARA LA
CULTURA
Y LAS ARTES

ここでアップルが提案したコードを使用して、行の高さが26ポイントに一定になるようにNSAttributedStringを構成しました。

CGFloat lineSpacing = 26;
CTTextAlignment theAlignment = kCTLeftTextAlignment;

CTParagraphStyleSetting theSettings[3] = 
{
    {kCTParagraphStyleSpecifierMaximumLineHeight, sizeof(CGFloat), &lineSpacing},
    {kCTParagraphStyleSpecifierMinimumLineHeight, sizeof(CGFloat), &lineSpacing},
    {kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &theAlignment },
};

ただし、最後の行には余分なスペースがあります。

単語の間に手動でスペースを追加すると、期待どおりの結果が得られるため、印刷する場合は次のようになります。

CONSEJO            NACIONAL                    PARA LA                                                                CULTURA                                                         Y LAS ARTES

これを示しています(最後の行に余分なスペースがないことに注意してください):

フレームサイズに基づいてスペースを追加するためにすべての文字列を手動で変更する必要がないため、これは持続可能な解決策ではありません。

私は何ヶ月もテストしてきましたが、これを解決することができませんでした。最後の行は常により多くのスペースを取得します。

また、「\ r」を試して、これによって異なる結果が得られるかどうかを確認しましたが、それでもスペースが追加され、次のように表示されます。

Consejo\rNacional\rpara la\rCultura\ry las Artes

生産:

[左は\rを使用][右はスペースを使用]

[ここでは、すべての青いブロックは同じサイズです]

したがって、スペースは少なくなりますが、必要以上に多くなります。

CoreTextは、このような単純な文字列を処理できる必要があります。

スペースを追加するだけでは十分ではありません(いくつかの理由で)。これを制御する方法が必要です。

問題は何だと思いますか?

4

1 に答える 1

0

画像が見えませんが、少し前に出会ったのと同じ問題が発生したと思います。こちらをご覧ください。

とを使用CTTypesetterCTTypesetterSuggestClusterBreakて、改行を手動で処理できます。線の高さとしてフォントサイズを使用し、手動で線を描画するときに行間隔を追加しますが、正常に機能します。

于 2012-05-11T04:18:36.563 に答える