2012-03-26 20 views
2

私は自分のカスタムUITextViewを開発していて、AppleのSimpleTextInputを見て、行末の空白がなくなったときに空白や改行(または次の行に移動)しないことに気付きました。その上に。代わりに、ビューの幅の境界を超えて同じ行に引き続き描画されます。CoreText - スペースは折り返しませんか?

これはバグですか、これは意図した動作ですか?とにかく、CoreTextで次の行に折り返し/改行するスペースを確保するにはどうしますか?

更新:個別に空白を設定してkCTLineBreakByCharWrapping属性を設定しようとしましたが、動作しませんでした。おそらく、正しく動作するかもしれない@" "の代わりに入力できるユニコード文字がありますか?今のところ手動でこれをコードに入れなくてもいいようにしようとしています。

答えて

4

""の代わりに-を使用しましたが、テキストを描画する前に、- が空白として消去されている場所を作成する必要があります。だからあなたは空白の空間で好きなことをすることができます、私はこれらの場所でemojiを描く、それは私のために働く。お試しください~ ^.^

7

空白だけで改行が発生しないように設計されています。余白を横切る可視文字のみが改行をトリガーします。

CTLineの末尾にある空白の幅は、CTLineGetTrailingWhitespaceWidthを使用して見つけることができます。

CTRunDelegateアトリビュートを付加することで、空白文字が改行(余白をまたいだ場合)を引き起こす可能性があります。 CTRunDelegateに適切な幅、上昇、および下降を報告する必要があります。これはおそらくCTFontで検索する必要があります。おそらく、同じフォントとサイズで設定されているすべてのスペースに対して、単一のインスタンスCTRunDelegateを使用することができます。

+0

ありがとうございます。実際に私はUITextViewの動作を模倣しました。その場合、行の最後にスペースを入れるとスペースが追加されますが、カーソルはその場所にとどまります。 –

+0

CTRunDelegateは、空白にアタッチされていると実際には*助けません。これは通常のnobr空間にも適用されます。 – Nuoji