iOS 8:UINavigationController 弹出没有动画然后推送

Posted

技术标签:

【中文标题】iOS 8:UINavigationController 弹出没有动画然后推送【英文标题】:iOS 8: UINavigationController popping without animation and then pushing 【发布时间】:2014-09-05 18:36:49 【问题描述】:

在我们的应用程序中,有很多地方需要快速弹出一个没有动画的视图控制器,然后推送一个带有动画的新视图控制器。我们会做类似的事情

[navController popViewControllerAnimated:NO];
[navController pushViewController:newVC animated:YES];

ios8 之前,这工作正常,动画显示新的视图控制器滑入当前视图控制器,因为导航控制器第一次弹出时没有动画。

现在在 iOS8 中,这似乎发生了变化,现在发生的情况是顶部视图控制器被弹出,底层视图控制器闪烁片刻,然后新的视图控制器被推送。我从头开始为 iOS8 创建了一个 Xcode 项目并尝试对此进行测试。 Please see this GIF 演示它的外观。每次我们点击拆分视图主侧中的一个按钮时,我们都会在拆分的详细信息(右侧)侧执行上述两行代码。请注意,在推送新视图之前,灰色视图(导航控制器的根)会闪烁一秒钟。

我曾尝试寻找任何原因说明这可能在 iOS8 中发生了变化,但我似乎找不到任何关于它的文档。有人对可能导致这种变化的原因有任何想法吗?任何意见将不胜感激!

另外,我尝试使用代码并发现改为执行以下代码

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:navController.viewControllers];
[viewControllers removeLastObject];
[viewControllers addObject:newVC];
[navController setViewControllers:viewControllers animated:YES];

似乎解决了这个问题。但是,如果可能的话,我宁愿不使用它,因为我们的应用程序中有很多地方都使用了这个 2 行弹出-推送组合,我不希望到处都改变它。

谢谢!

【问题讨论】:

在我看来,iOS8 实际上做得很好,而你在 iOS8 之前看到的任何东西都可能不是有意的。 我发现即使我先推然后弹,我仍然会得到时髦的动画。 您找到这个问题的原因或解决方法了吗?请更新。 几周前我向 Apple 提交了一份错误报告,但他们仍然没有回复。现在我找到的唯一解决方案就是我上面提到的那个 【参考方案1】:

我想出了类似的解决方案给你,但第一个是情境。

首先,您可以覆盖您正在操作的堆栈中的后退按钮以弹出到根目录(或您想成为根目录的任何控制器)。

其次,您可以向 UINavigationController 添加一个类别,基本上实现您上面列出的代码。这将使您不必在应用程序中的任何地方进行更改。

-(UIViewController *)popPushViewController:(UIViewController *)controller animated:(BOOL)animated 
    NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.viewControllers];
    [viewControllers removeLastObject];
    [viewControllers addObject:controller];
    [self setViewControllers:viewControllers animated:animated];

如果 Apple 不修复/响应,我计划实施后者。

【讨论】:

以上是关于iOS 8:UINavigationController 弹出没有动画然后推送的主要内容,如果未能解决你的问题,请参考以下文章

功能差异,UINavigationController vs Only Storyboard Segue

在 UINavigationController 中设置自定义导航栏类

在 UINavigationController 中设置自定义导航栏类

在 Swift 2.0 中设置 UINavigationController 栏标题

UINavigationController -> UIViewController -> UIView -> UITableViewController?

用动画隐藏导航控制器和标签栏控制器