から継承したものを使っsizeToFit
てみましたか?ここのテストプロジェクトで試してみましたが、うまくいくようです。NSTextField
NSControl
例えば:
[textField sizeToFit];
[更新]:おそらく私は理解していません。テキストなどを表示するテキスト フィールドをプログラムで作成していますか? その場合でもsizeToFit
、ビュー階層に追加する前にテキスト フィールドを適切なサイズにするために使用できます。たとえば、次のコード:
// this code sample assumes ARC
NSTextField *labelField = [[NSTextField alloc] initWithFrame:
NSMakeRect(0.0, 0.0, 10.0, 10.0)];
[[labelField cell] setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
[labelField setBezeled:NO];
[labelField setDrawsBackground:NO];
[labelField setEditable:NO];
[labelField setSelectable:YES];
[labelField setStringValue:@"Sphinx of black quartz, judge my vow. Sphinx of black quartz, judge my vow."];
NSLog(@"labelField.frame (BEFORE) == %@", NSStringFromRect(labelField.frame));
NSLog(@"calling [labelField sizeToFit]");
[labelField sizeToFit];
NSLog(@"labelField.frame (AFTER) == %@", NSStringFromRect(labelField.frame));
labelField.frame = NSOffsetRect(labelField.frame, 50.0, 100.0);
[self.window.contentView addSubview:labelField];
このコードを実行すると、次のログ出力が生成されます。
2013-02-28 17:23:21 SizeToFit[] labelField.frame (BEFORE) == {{0, 0}, {10, 10}}
2013-02-28 17:23:21 SizeToFit[] calling [labelField sizeToFit]
2013-02-28 17:23:21 SizeToFit[] labelField.frame (AFTER) == {{0, 0}, {493, 17}}
このコードでは、NSTextField
10 ピクセル x 10 ピクセルのみの任意の初期フレーム サイズで を作成しました。標準の 13pt ラベルと同等になるようにフィールドのいくつかのプロパティを設定した後、文字列値を長い文字列に設定しました。文字列値を設定した後、ロギング呼び出しは、テキスト フィールドのフレームがまだ同じ 10 x 10 の寸法であることを示します。次に を呼び出し[labelField sizeToFit]
ます。ご覧のとおり、2 回目のロギング呼び出しは、テキスト フィールドが理想的なサイズにサイズ変更されたことを示しています。テキスト フィールドを配置する場所の計算では、このサイズを使用できるはずです。