コンテナコントローラーの子であるビューコントローラーがあり、デバイスの向きが変わったときにビューのサイズ変更を処理する方法を知りたいです。子コントローラーは、予期されたviewWillLayoutSubviewsイベントを受信していません。
ビューの境界が変更されたときに「viewWillLayoutSubviews」が呼び出されるという印象を受けていますが、境界値はChildViewControllerのwillRotateToInterfaceOrientationイベントとdidRotateFromInterfaceOrientationイベントの間で同じままです。 何故ですか?
ローテーション中に表示されるビュー固有のイベントは次のとおりです。
[ParentViewController viewDidLoad]
[ParentViewController viewWillLayoutSubviews]
[ParentViewController layoutHomeForStartup]
[ParentViewController viewDidAppear:]
[ParentViewController showLoginView]
[ChildViewController viewDidLoad]
[ChildViewController didMoveToParentViewController:]
[ParentViewController viewWillLayoutSubviews]
[ChildViewController viewWillLayoutSubviews]
[ChildViewController viewDidAppear:]
[ChildViewController showLoginPanel]
[ParentViewController willRotateToInterfaceOrientation:duration:]
[ChildViewController willRotateToInterfaceOrientation:duration:]
[ParentViewController viewWillLayoutSubviews]
// QUESTION: Why doesn't the childViewController not receive viewWillLayoutSubviews?
[ParentViewController didRotateFromInterfaceOrientation:]
[ChildViewController didRotateFromInterfaceOrientation:]
子コントローラーを親に追加する方法は次のとおりです。
// ParentViewController:
- (void)viewDidLoad
{
ChildViewController *childViewController = [ChildViewController alloc] initWithNibName...];
[childController willMoveToParentViewController:self];
[self addChildViewController:childController];
[view addSubview:childController.view];
[childController didMoveToParentViewController:self];
}
私はまだiOS5.0以降のデバイスをターゲットにしているので、以下も実装しました。
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
{
return YES;
}
shouldAutomaticallyForwardAppearanceMethods
また、shouldAutomaticallyForwardRotationMethods
実装され、YESを返します(iOS 6以降を使用している場合)。
コンテナコントローラーの子ビューコントローラー内で方向の変更を処理するための最良の方法がわかりません。