iOS 9:推送/stream行视图控制器由edgesForExtendedLayout中断

在iOS 9上进行debugging时,我发现了一个奇怪的问题。在View Controller的viewDidLoad我有这样一段代码:

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) { self.edgesForExtendedLayout = UIRectEdgeNone; } 

当我推动或popup一个新的视图控制器时,我注意到一个奇怪的animation。 过渡并不顺利,好像它正在显示视图控制器的“堆栈”(您可以注意到两幅图像的顶部,甚至是底部)。

在这里输入图像说明 首要问题

我在iOS 7或iOS8上没有问题,这是新发布的iOS 9的错误还是我错过了一些东西?

还值得一提的是,我正在使用自定义animation进行推/视图控制器转换。

这里是一个重写的UINavigationController方法的例子

 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { UIView *theWindow = self.view; [[theWindow layer] removeAllAnimations]; if (animated) { CATransition *animation = [CATransition animation]; [animation setDuration:0.25]; [animation setType:kCATransitionFade]; [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; [[theWindow layer] addAnimation:animation forKey:@""]; } [super pushViewController:viewController animated:NO]; } 

编辑

我一直在debugging这个问题几个小时了。 我已经重新实现了iOS 7中引入的视图控制器转换API( navigationController:animationControllerForOperation:operation fromViewController:toViewController )的自定义animation,但问题依然存在。

如果过渡animationalpha属性,问题发生。

你有一个想法如何克服这个问题?

谢谢。

您需要为toViewController设置最终框架。 transitionContext.finalFrame(for:)可以帮助您确定它。 就像是:

 toViewController.view.frame = transitionContext.finalFrame(for: toViewController)