これを' sにすると、viewController
' sのview
サイズが変更されたように見えます。それ以外の場合は、フレームを手動で設定する必要があります。viewController
rootViewController
application
window
私はこのコードを試しました:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
FooViewController *viewController = [[FooViewController alloc] init];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
FooViewController *viewController2 = [[FooViewController alloc] init];
[viewController.view addSubview: [viewController2 view]];
return YES;
}
viewController
サイズが変更されましたが、そうでviewController2
はありませんでした。
またviewController
、このすべてのメソッドが呼び出されました:
viewDidLoad
viewWillLayoutSubviews
viewDidLayoutSubviews
viewDidAppear
と呼ばれただけviewController2
です。viewDidLoad
viewDidAppear
また興味深い:それが呼び出されるviewController
前にサイズ変更されました。viewWillLayoutSubviews
編集:
これはさらにテストする価値があると思いました。次のコードを使用します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
FooViewController *viewController = [[FooViewController alloc] init];
NSLog(@"after init: self.view is %@", viewController.view);
self.window.rootViewController = viewController;
NSLog(@"after setting to rootViewController: self.view is %@", viewController.view);
[self.window makeKeyAndVisible];
NSLog(@"after makeKeyAndVisible: self.view is %@", viewController.view);
return YES;
}
結果は次のとおりです。
viewDidLoad: frame = (0 0; 0 0)
after init: frame = (0 0; 0 0)
after setting to rootViewController: frame = (0 0; 0 0)
after makeKeyAndVisible: frame = (0 20; 320 460)
viewWillLayoutSubviews: frame = (0 20; 320 460)
viewDidLayoutSubviews: frame = (0 20; 320 460)
viewDidAppear: frame = (0 20; 320 460)
[self.window makeKeyAndVisible];
犯人もそうです。