使用自定义animation时,会在iOS9上忽略edgesForExtendedLayout

当使用UIViewControllerAnimatedTransitioning实现自定义animation时,iOS9似乎忽略了目标视图控制器的edgesForExtendedLayout ,因此内容会在导航栏下方结束。 任何想法为什么发生这种情况?

我已经在https://github.com/nmarkovic04/CustomAnimationTest举办了一个例子。 在8.4和9.1上运行它显示了不同之处,但是你很可能会尝试任何其他的8.x和9.x版本。

运行在Xcode 7,Swift 2.0上。

截图

这在ViewDidLoad修复它,你可以确认请:]

self.edgesForExtendedLayout = .Top self.extendedLayoutIncludesOpaqueBars = true

只是设置这个:

  self.edgesForExtendedLayout = UIRectEdgeTop; 

为我解决了这个问题。

我知道这是可怕的,但在viewDidLoad()我解决了这个:

 var frame = self.view.frame frame.origin.y = 64 //The height of status bar + navigation bar self.view.frame = frame 

对我来说,第一次看到我的视图控制器出现问题,当我旋转设备的问题已经消失。

你必须设置适当的ViewController的框架。 transitionContext.finalFrame(for:)将帮助你。 这是我的animateTransition(使用:)函数淡入/淡出animation。 这一行设置框架也将修复您的共享项目。

 func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { if let toViewController = transitionContext.viewController(forKey: .to) { transitionContext.containerView.addSubview(toViewController.view) toViewController.view.frame = transitionContext.finalFrame(for: toViewController) toViewController.view.alpha = 0.0 UIView.animate(withDuration: 0.5, animations: { toViewController.view.alpha = 1.0}, completion: { finished in transitionContext.completeTransition(!transitionContext.transitionWasCancelled)}) } }