0

マージンなしでNSTextFieldを作成する方法はありますか?テキストフィールドをテキスト自体と同じ幅に設定しようとしていますが、すべてを表示するには、ランダムなnr(10px)を追加する必要があります。

NSSize size = [title sizeWithAttributes:[NSDictionary dictionaryWithObject:[NSFont fontWithName:@"LucidaGrande" size:fontSize] forKey:NSFontAttributeName]];
4

1 に答える 1

0

から継承したものを使っsizeToFitてみましたか?ここのテストプロジェクトで試してみましたが、うまくいくようです。NSTextFieldNSControl

例えば:

[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}}

このコードでは、NSTextField10 ピクセル x 10 ピクセルのみの任意の初期フレーム サイズで を作成しました。標準の 13pt ラベルと同等になるようにフィールドのいくつかのプロパティを設定した後、文字列値を長い文字列に設定しました。文字列値を設定した後、ロギング呼び出しは、テキスト フィールドのフレームがまだ同じ 10 x 10 の寸法であることを示します。次に を呼び出し[labelField sizeToFit]ます。ご覧のとおり、2 回目のロギング呼び出しは、テキスト フィールドが理想的なサイズにサイズ変更されたことを示しています。テキスト フィールドを配置する場所の計算では、このサイズを使用できるはずです。

于 2013-02-28T20:42:37.737 に答える