4

我需要在我的导航控制器中创建一个类似于pushViewController:viewController animated:YES方法的方法,但我需要在视图控制器的框架顶部添加 80px,同时它执行从左到右的转换。但是,下面的方法会引发以下错误:

父视图控制器在调用 -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]' 时使用了遗留容器

- (void)transitionFrom:(UIViewController *)oldController To:(UIViewController *)newController
{
    [self addChildViewController:newController];
    //[self configureChild:newController];
    [newController.view setFrame:CGRectMake(320, 80, oldController.view.frame.size.width, oldController.view.frame.size.height)];
    [self transitionFromViewController:oldController
                      toViewController:newController
                              duration:0.5
                               options:UIViewAnimationOptionTransitionFlipFromLeft
                            animations:^{
                                [oldController.view setFrame:CGRectMake(-320, 80, oldController.view.frame.size.width, oldController.view.frame.size.height)];
                                [newController.view setFrame:CGRectMake(0, 80, newController.view.frame.size.width, newController.view.frame.size.height)];
                            }
                            completion:^(BOOL finished){
                                //[oldController willMoveToParentViewController:nil];
                                [oldController removeFromParentViewController];
                                [newController didMoveToParentViewController:self];
                            }];
}
4

3 回答 3

4

哇,我也为此苦苦挣扎了几个小时。

这是我发现的,它可能对其他人有帮助。

我不是transitionFromViewController从 a打来的UINavigationController,但是,我收到了同样奇怪的信息

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Parent view controller is using legacy containment in call to 
 -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]'

我终于发现我的问题是我在我的容器 UIViewController 子类中覆盖了这个方法:

-(BOOL)shouldAutomaticallyForwardAppearanceMethods
{
    return NO;
}

通常默认为 YES,除非您想自己处理(我受到 Apple WWDC2012 MediaNote 示例代码的启发......)。

如果你想transitionFromViewController工作,那么shouldAutomaticallyForwardAppearanceMethods应该返回YES。

于 2013-07-26T12:32:00.107 回答
4

您是transitionFromViewController在 UINavigationController 上调用吗?(self是 UINavigationController 的一个实例吗?)因为如果你调用transitionFromViewControllerUINavigationController,你会得到这个错误。Apple 文档指出这种方法

仅旨在由自定义容器视图控制器的实现调用。如果你重写这个方法,你必须在你的实现中调用 super

. 有关更多详细信息,请查看http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html

于 2013-04-30T19:55:36.383 回答
0

从 Apple管理儿童外观更新中查看本教程

表示您需要自己处理外观通知。

[self.child beginAppearanceTransition: YES animated: animated];
//
[self.child endAppearanceTransition];
于 2019-06-25T09:35:30.260 回答