質問

NSView がビューのサイズを自動変更する方法を理解する必要があります。IB ですべてを設定すると、(マウスでウィンドウのサイズを変更すると) サブビューのサイズが適切に変更されます。ただし、そうする場合、 [myMainView setFrame:] 新しいフレーム四角形では何も起こりません。(メイン ビューのサイズが正しい場合でも) サブビューはすべて元のサイズのままです。子供の resizeWithOldSuperviewSize: が呼び出されますが、まだ適切なサイズではありません。

画面 (画面 #1)、ラベル、画像、ビデオにココア要素が画面いっぱいにあります。これらの要素には明確に定義されたレイアウトがあります。Interface Builder を使用して自動サイズ変更動作を設定しましたが、これは非常にうまく機能します。メイン ウィンドウのサイズを変更すると、要素のサイズが適切に変更されます。

ここで、ユーザーが「次へ」ボタンをクリックすると、要素の 2 番目の画面全体 (画面 #2) が描画されます。私のレイアウトは標準的な画面サイズ (800x600 など) に基づいて構築されています。しかし、画面 #1 でサイズ変更されたため、ウィンドウは大きく (または小さく) なっています。そのため、要素は利用可能なスペースを埋めるように適切なサイズに設定されるのではなく、ウィンドウ内の小さな領域のみを占めるようになります。これらの要素を拡大縮小したいと考えています。

自動サイズ変更の仕組みを誤解しているのでしょうか?NSView の下にある自動サイズ変更機構を手動でトリガーするにはどうすればよいですか?

私にできることは 2 つあります。

  1. 元のサイズに対する現在の画面サイズに基づいて、要素のサイズを手動で変更します。このオプションは私の好みではありません。なぜなら、NSView で既に動作しているコード (自動サイズ変更動作) を書き直す必要があるように見えるからです。
  2. 2 番目のオプションは、前述の NSView の自動サイズ変更マジックを呼び出すことです。ドキュメントには、[NSView setFrame:] がそれを行うことが暗示されています。私が試したのは、コンテンツビューのサイズを元の画面サイズ(800x600)に変更し、要素をレンダリングしてから、現在のウィンドウサイズにサイズ変更することでした。概念的には、ウィンドウのサイズを手動で変更するのと同じではないでしょうか?そうではないようです。繰り返しますが、このオプションは、作成および保守する必要があるコードの量を最小限に抑えるため、推奨されます。
役に立ちましたか?

解決 2

私のアプローチが正しいことが判明。私はこのように私が期待される動作を取得していなかった、間違った値にフレームサイズを設定しました。 DOHます。

他のヒント

このコード

NSView* superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
NSView* subView   = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
[superView addSubview:subView];

[superView setAutoresizesSubviews:YES];
[subView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

NSLog(@"subview's frame before resizing: %@", NSStringFromRect([subView frame]));
[superView setFrame:NSMakeRect(0, 0, 200, 100)];
NSLog(@"subview's frame after  resizing: %@", NSStringFromRect([subView frame]));

期待される結果が得られています:

[...] subview's frame before resizing: {{0, 0}, {100, 100}}
[...] subview's frame after  resizing: {{0, 0}, {200, 100}}

あなたの問題は、他の場所です。私はあなたのコンテナビューの1つは、サイズ変更が発生した時点でのウィンドウのビュー階層の一部ではないことを期待しています。

その後、すべてのあなたの意見は(おそらく非表示)ウィンドウ内のすべての回であるので、あなたの問題のために良い解決策は、使用せずに、タブNSTabViewかもしれないとtabviewは、サイズ変更の世話をする。

別の解決策は、互いの上にいくつかの意見を入れて、一つだけを表示するようにsetHidden:を使用することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top