0

私は一日中これに対する解決策を探していました。

私は 4 つの NSTextFields (実際にはいくつかのカスタム操作のためにサブクラス化されています) を持っています。これらはすべて同じ X 位置を共有しています。

問題は、いくつかのスタイル (ライト、レギュラー、ボールド) が異なり、サイズが異なる場合があることです。

何が起こるかというと、X の原点が同じであっても、最初の文字には常に少しの (一貫して異なる) 左余白があります。

写真をご覧ください: https://dl.dropbox.com/u/1977230/Screen%20Shot%202012-12-11%20at%2017.55.58.png

すべての行が正確に同じポイント、たとえば左から 100px から始まるようにしたいと考えています。

その奇妙なパディングをオーバーライドする方法はありますか?

乾杯

4

3 に答える 3

6

あなたが話しているマージンは、によって使用される であると確信lineFragmentPaddingしています。NSTextContainerNSTextField

NSTextContainer リファレンスを参照してください。

http://developer.apple.com/library/Mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTextContainer_Class/Reference/Reference.html

テキストレイアウトのチュートリアルのページは次のとおりです。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextLayout/Concepts/CalcTextLayout.html

その記事では次のように述べています。

タイプセッターは、実際にテキストを四角形に収める際に最終的な調整を行います。この調整は、NSTextContainer オブジェクトによって固定される少量であり、ライン フラグメントのパディングと呼ばれます。これは、ライン フラグメントの四角形の両端で空白のままにする部分を定義します。テキストは、この量だけ行フラグメントの長方形内に挿入されます (長方形自体は影響を受けません)。パディングを使用すると、テキスト コンテナーの領域の端や穴の周囲を微調整でき、テキストが領域の近くに表示される他のグラフィックに直接接しないようにできます。setLineFragmentPadding: メソッドを使用して、パディングをデフォルト値から変更できます。行フラグメントのパディングは、マージンを表現する適切な手段ではないことに注意してください。

残念ながら、とは非公開でアクセスできないように見えますが、 でアクセスできるようNSTextFieldです:NSTextContainerNSLayoutManagerNSTextView

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTextView_Class/Reference/Reference.html#//apple_ref/occ/cl/NSTextView

したがって、この種の機能を細かく制御したい場合は、このクラスをサブクラス化する必要があります。

于 2012-12-26T08:38:55.523 に答える
2

CoreText を調べましたか? 私はそれがあなたが探していることをするための施設を提供するかもしれないと思います. ドキュメントから...

Core Text レイアウト エンジンは、単純なテキスト レイアウト操作を簡単にし、副作用を回避するために特別に設計されています。

「フォント メトリックス」にアクセスできます。これにより、(ドキュメントから)...

すべてのフォントについて、グリフ デザイナーはメトリックと呼ばれる一連の測定値を提供します。これは、フォント内の各グリフの周囲の間隔を記述します。タイプセッターは、これらの指標を使用してグリフの配置を決定します。フォント メトリックは、アセント、ディセント、リーディング、キャップの高さ、x 高さなどのパラメーターです。

編集:NSTextFieldあなたがやろうとしていることのために設計されていないかもしれません。NSTextFieldとは別にカスタム レイアウトを行いますNSLayoutManager。にアップグレードする必要がある場合があります。NSTextViewこれには常に専用がNSLayoutManager接続されています。NSLayoutManagerApple には、 およびを使用して検索できるサンプル プロジェクトがいくつかありNSTextViewます。

于 2012-12-12T18:59:31.677 に答える
1

NSTextField を使用して単純な静的テキストを描画している場合は、AppKit の NSString への追加をご覧ください。sizeWithAttributes:「テキスト」画像のサイズを取得するために使用します。次に、サイズを使用して描画用の四角形を計算します。最後に、いずれかのdraw方法を使用して実際にテキストを描画します。の結果を「丸める」ことを忘れないでくださいsizeWithAttributes! ピクセル整列ではありません。

ただし、単純なラベルよりも複雑なものを描画する必要がある場合は、Core Text を使用してください。twui ソース コードで使用方法の非常に良い例を見つけることができます。

于 2012-12-19T16:32:41.403 に答える