奇妙な動作を見つけました。どの主張が間違っているかを説明してもらいたいです。
新しく作成した WindowBased プロジェクトの AppDelegate クラスで、ウィンドウに UIViewController を追加しています。
私はそれを 2 つの異なる方法で行うことができます:
- IBOutlet を使用します。IB では、単純に UIViewController をインスタンス化し、そのクラスを TestViewController に設定して接続しました (コードのシナリオ A)。
- コードを使用して UIViewController を作成する (シナリオ B)。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
#define USE_IBOUTLET YES // Comment this line to switch to scenario B
#ifdef USE_IBOUTLET
// Scenario A
[window addSubview:theTestViewController.view];
[window makeKeyAndVisible];
#endif
#ifndef USE_IBOUTLET
// Scenario B
TestViewController *theTestViewControllerProgrammatically;
theTestViewControllerProgrammatically = [[TestViewController alloc] initWithNibName:nil bundle:nil];
// According to Apple: "It is a good idea to set the view's frame before adding it to a window.", so let's do it
[theTestViewControllerProgrammatically.view setFrame:[[UIScreen mainScreen] applicationFrame]];
[window addSubview:theTestViewControllerProgrammatically.view];
[window makeKeyAndVisible];
#endif
}
IB でオブジェクトのカスタマイズを行っていないため、両方のシナリオで同じ動作になるはずです。
シナリオ A、IBOutlet を使用すると、期待どおりに動作します。
ただし、シナリオ B には次の問題があり
ます。
- ビューのサイズが適切に変更されない (たとえば、通話中ステータス バーを切り替えようとする)
なんで?
問題を再現したい場合は、プロジェクトの zip アーカイブをこちらからダウンロードしてください: http://dl.dropbox.com/u/1899122/code/ProtoWindowBasedStrangeness.zip