1

ですから、この質問が数回聞かれるのを見たことがありますが、私の問題を解決する答えは見つかりませんでした。現在、基本的にMainMenu.xibがあり、上部にラベルが中央に配置され、大きなカスタムビューが中央に配置され、カスタムビューのサブビューを切り替えるボタンが下部に配置されています(下の図を参照)。インターフェイスビルダーでサブビューのサイズを自動変更するようにウィンドウとカスタムビューを設定しました。すべてのボタン、ラベルなどには、ビューの側面に関連する制約がありますが、ウィンドウのサイズを変更すると、サブビューのコンテンツはサイズ変更しないでください。カスタムビューはウィンドウでサイズ変更されていると思います。ボタンでサブビューを切り替えると、読み込まれるサブビューがウィンドウでサイズ変更され、リアルタイムでウィンドウのサイズが変更されないためです。

MainMenu.xib:

通常のサブビュー: ここに画像の説明を入力してください

ウィンドウが展開された後: ここに画像の説明を入力してください

サブビューを切り替えてから元に戻しました。 ここに画像の説明を入力してください

制約:

MainMenu.xib: ここに画像の説明を入力してください

BlockViewController.xib: ここに画像の説明を入力してください

4

2 に答える 2

5

理解した!本当にシンプルで、各ViewControllerサブクラスのawakeFromNibメソッドに1行のコードがあります。

[self.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
于 2013-02-22T20:28:54.837 に答える
1

写真とコメントの説明から、問題は、カスタムビューがサブビューのサイズを変更する方法を決定するためのレイアウト制約を取得しないことであるように思われます。

次のコード(ブラウザーで直接入力されるため、注意してください)は、サブビューの境界線をカスタムビューに「接着」するために必要な制約を提供する必要があります。

[self.customView addSubview: self.blockSubView.view];
self.blockSubView.view.frame = self.customView.bounds;

NSView *blockSubView = self.blockSubView.view;

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(blockSubView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[blockSubView]|"
                                                               options:0
                                                               metrics:nil
                                                                 views:viewsDictionary];


constraints = [constraints arrayByAddingObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat:@"V|[blockSubView]|"
                                                               options:0
                                                               metrics:nil
                                                                 views:viewsDictionary]];

[self.customView addConstraints: constraints];

これについては、ドキュメントに詳しく説明されています。デバッグのコツに注意してください。これは、不可欠であるという点で非常に便利です。

于 2013-02-21T22:24:24.417 に答える