1

幅が固定で高さが可変のビューを作成したい。これは、コンテンツの高さに応じてビューのサイズを自動的に変更する必要があることを意味しますが、同時に同じ幅を維持する必要があります。

どうすればプログラムでそれを達成できますか?

たとえば、ラベルとボタンを作成する次のコードがあります。

NSTextField *label = [[NSTextField alloc] initWithFrame:[self frame]];
[label setEditable:NO];
[label setBackgroundColor:[NSColor clearColor]];
[label setBezeled:NO];
[label setFont:[NSFont fontWithName:@"Lucida Grande" size:13.0]];
[label setStringValue:@"Sample label text"];

NSButton *button = [[NSButton alloc] initWithFrame:primaryBounds];
[button setBezelStyle:10];
[button setTitle:@"Sample button text"];
[button setBounds:NSInsetRect([button bounds], -8.0, 0)];
[button sizeToFit];

[[self contentView] addSubview:label];
[[self contentView] addSubview:button];

それらはcontentViewフレーム全体を埋めるように設定されました。固定幅と可変高さ (それ自体のテキスト コンテンツに基づく)を設定labelするにはどうすればよいですか?buttonlabel


さて、私はlabelこのように自動サイズ調整することができました:

NSTextView *label = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, [self frame].size.width, 0)];
[label setEditable:NO];
[label setBackgroundColor:[NSColor clearColor]];
[label setFont:[NSFont fontWithName:@"Lucida Grande" size:13.0]];
[label setString:@"Sample label text"];
[label setHorizontallyResizable:NO];
[label sizeToFit];
4

1 に答える 1

1

Mountain Lion を使用した自動レイアウトでは、テキスト フィールドに適切な幅を指定します。

[textField setPreferredMaxLayoutWidth:200]

テキスト フィールドは、200 ポイントで折り返されているかのようにコンテンツのサイズを測定し、コンテンツがその幅に達すると、テキスト フィールドは垂直方向に拡大することを優先します。

ボタンをラベルの下部に付けるには、ラベルの下部がボタンの上部に 22 を加えた値に等しいという制約を追加します。

[parentView addConstraint:
   [NSLayoutConstraint constraintWithItem:label
                                attribute:NSLayoutAttributeBottom
                                relatedBy:NSLayoutRelationEqual
                                   toItem:button
                                attribute:NSLayoutAttributeTop
                               multiplier:1
                                 constant:22]];

または、ビジュアル形式の言語と標準の Aqua スペーシングを使用します。

NSDictionary *viewsDict = NSDictionaryOfVariableBindings(label, button);
[view addConstraints:
     [NSLayoutConstraint constraintsWithVisualFormat:@"V:[label]-[button]"
                                             options:0
                                             metrics:nil
                                               views:viewsDict]];
于 2012-12-29T05:09:25.550 に答える