3

ウィンドウのビュー内に NSTextField があります。

すべてのIBオプションを試しましたが、次のことを達成できないようです:

NSTextField にはかなり長い文があります。ウィンドウのサイズが狭い幅に変更されると、NSTextField も狭くなり、テキストが次の行に押し出されます。ただし、NSTextField の下部に押し出されたテキストは単に切り取られます。背の高いテキストに対応するために、NSTextField のサイズを垂直方向に拡張したいと考えています。

これは自動的に行うことができますか、それとも Window resize イベントを観察して NSTextField の高さを再計算する必要がありますか?

10.7 と 10.8 をサポートする必要があり、Autolayout と Autoresizing の両方を使用しようとしましたが、役に立ちませんでした。

編集 - これは、ジェリーの回答 (および Github からの彼のカテゴリ) に基づいて機能するコードです。

-(void)setFrame:(NSRect)frameRect{

  NSRect myFrame = CGRectMake(frameRect.origin.x, frameRect.origin.y, frameRect.size.width, [self.stringValue heightForWidth:frameRect.size.width attributes:nil]);
  [super setFrame: myFrame];
}
4

2 に答える 2

2

Autolayout はより高いレベルで動作します。テキストフィールドのサイズを変更する必要があると思います。

-sizeToFit をテキスト フィールドに送信してみることができますが、垂直方向ではなく水平方向に拡張される可能性があります。それでうまくいかない場合は、私のNS(Attributed)String+Geometrics カテゴリの -heightForWidth:: メソッドを見てください。このメソッドを使用すると、NSTextField をサブクラス化し、-sizeToFit をオーバーライドして垂直方向に拡張できます。サイズ変更を setFrame: と setStringValue: の両方に組み込んで、常に適切な高さを維持するのはクールかもしれません。

Autolayout がそこから引き継ぎ、必要に応じて兄弟サブビューを移動およびサイズ変更する必要があります。

于 2013-02-13T16:34:44.240 に答える