0

私のアプリでは、window.contentView のサイズは 700*500 で、view1 を window.contentView のサブビューとして追加した後、480*300 のサイズの xib から view1 という名前のビューを初期化します。 view1 のサイズを 700*500 に変更し、autoresizingMask を設定しましたが、機能しません。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    self.rootViewController = [[TrendRootViewController alloc] initWithNibName:@"TrendRootViewController" bundle:[NSBundle mainBundle]];
    NSView *view1 =  self.rootViewController.view;
    [self.contentView addSubview:view1];
    NSLog(@"view1 frame %@",NSStringFromRect(view1.frame));
}

view1 xib ここに画像の説明を入力

私のアプリ:(赤いビューはview1です) ここに画像の説明を入力

view1 のフレームが "view1 frame {{0, 0}, {480, 300}}" になっているのはおかしいのですが、以下に示すように、view1 は左上の位置にありませんでした。

4

2 に答える 2

0

これを行うには、IB のサイズ変更ボックスのすぐ上にある原点ボックスの矢印の位置を変更します。原点ボックスの左上をクリックするだけで、ビューが左上に表示されます。

于 2013-04-15T01:37:55.083 に答える
0

"view1 のフレームが "view1 フレーム {{0, 0}, {480, 300}}" であることは奇妙ですが、以下に示すように、view1 は左上の位置にありませんでした。

OS X は iOS ではなく、AppKit は UIKit ではありません。

UIKit ベースのビューの iOS のデフォルトの座標系は左上原点 (ULO) ですが、AppKit ベースのビューの OS X のデフォルトは左下原点 (LLO) です。

したがって、赤のビューのフレームが であることは理にかなっています{{0, 0}, {480, 300}}。その原点は で{0, 0}あり、ウィンドウの の左下隅ですcontentView

UIViewControlleriOS の一部の とは異なりNSViewController、ウィンドウのサイズに合わせてビューのサイズを自動的に調整しません。ビューのフレームをウィンドウのフレームと一致させたい場合は、いくつかの異なるオプションがあります。

1 つのオプションは、ウィンドウの にサブビューとして追加する前に、ビューのフレームを自分で設定することcontentViewです。

NSView *redView = self.rootViewController.view; // force view to load
[redView setFrame:NSMakeRect(0.0, 0.0, NSWidth(self.window.frame),
                                       NSHeight(self.window.frame))];
[self.window.contentView addSubview:redView];

または、Interface Builder でNSBox、ウィンドウのコンテンツ ビューと同じサイズの をウィンドウに追加することもできます。IB で、ボックスのタイトル位置をNone、ボックス タイプをCustom、ボーダー タイプを に設定しNoneます。その「スプリングとストラット」(マスクの自動サイズ変更) を view1.xib のビューのものと同じになるように設定します (ウィンドウのサイズを変更すると、ボックスもそれに合わせてサイズ変更されます)。次に、ボックスの を作成し、ビュー コントローラをサブビューとしてウィンドウのIBOutletに追加する代わりに、 を呼び出してビュー コントローラのビューを渡します。viewcontentViewNSBoxsetContentView:

[self.box setContentView:self.rootViewController.view];

NSBoxのメソッドで説明されsetContentView:ているように、渡すビューは「...ボックスの現在のコンテンツ領域に収まるようにサイズ変更され、ボックスは再表示用にマークされます。」つまり、ボックスは自動的に適切なサイズへのビューのサイズ変更を処理します。

于 2013-04-15T18:36:16.033 に答える