子容器控制器在旋转事件后未接收viewWillLayoutSubviews

时间:2013-03-10 17:44:04

标签: iphone objective-c ios5 uiviewcontroller

我有一个视图控制器,它是容器控制器的子代,我想知道当设备上的方向发生变化时如何处理调整视图的大小。 子控制器未收到预期的viewWillLayoutSubviews事件。

我认为当视图的边界发生变化时会调用'viewWillLayoutSubviews',但是在ChildViewController的willRotateToInterfaceOrientation和didRotateFromInterfaceOrientation事件之间,bounds值保持不变。 为什么?

我在轮换期间看到的视图特定事件是:

[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];
}

因为我仍然以iOS 5.0+设备为目标,所以我也实现了:

- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers 
{
    return YES;
}

shouldAutomaticallyForwardAppearanceMethodsshouldAutomaticallyForwardRotationMethods也已实现并返回YES(适用于使用iOS 6 +的用户);

我不确定在容器控制器的子视图控制器中处理方向更改的最佳方法是什么。

1 个答案:

答案 0 :(得分:0)

1。

automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers实际上是两种方法:

他们被称为shouldAutomaticallyForwardRotationMethodsshouldAutomaticallyForwardAppearanceMethods

即使它是IOS5下的1种方法,你也必须为IOS6实现更新的变种

2

孩子们的界限似乎没有改变,你在评论中说,这是有道理的。因此,请在视图控制器的视图上调用setNeedsLayout以使它们自行布局:)