iOS 9:由edgesForExtendedLayout中断的推/弹出视图控制器

时间:2015-09-21 16:25:18

标签: ios cocoa-touch ios9

我在iOS 9上调试时发现了一个奇怪的问题。在我的View Controller的viewDidLoad中,我有这段代码:

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

当我推动或弹出一个新的视图控制器时,我注意到一个奇怪的动画。转换不顺利,看起来它正在显示视图控制器的“堆栈”(您可以注意到两个图像的顶部甚至略微底部)。

enter image description here first issue

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

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

以下是其中一个覆盖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];
}

修改

我已经调试了这个问题几个小时了。我已经重新实现了iOS 7中引入的视图控制器转换的API后面的自定义动画(navigationController:animationControllerForOperation:operation fromViewController:toViewController),但问题仍然存在。

如果转换为alpha属性设置动画,则会出现问题。

您是否知道如何克服这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

您需要为toViewController设置最终帧。 transitionContext.finalFrame(for:)可以帮助您确定它。类似的东西:

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