我一直在努力寻找答案。我通过以下方式建立了一个模态框的堆栈:
[[[NavA viewControllers] objectAtIndex:0] presentViewController:NavB animated:YES completion:NULL];
[[[NavB viewControllers] objectAtIndex:0] presentViewController:NavC animated:YES completion:NULL];
当我想同时关闭 NavA 和 NavB 模态框时,我调用以下命令:
[[[NavA viewControllers] objectAtIndex:0] dismissViewControllerAnimated:YES completion:NULL];
除了在整个堆栈消失时可以看到 NavB 的短暂闪烁外,这很好用。
我通过调试器进行了步骤,并且看起来在动画开始之前, NavC 立即消失,而 NavB 则带有动画消失。
有没有办法避免这种视觉伪影,并使整个堆栈平稳地消失, NavC 在动画的整个持续时间内都可见?
编辑:澄清一下,我正在呈现 UINavigationController
而不是 UIViewController
,因为此流程用于用户登录,并且有多个可能导致回到当前阶段(例如 NavC (LoginPage), NavB (具有登录和注册按钮的LandingPage)或完全回到根目录, NavA (应用程序的主页面)。在iOS文档中,他们使用相似的设计模式来展示相机,其中每个阶段都呈现具有多个可能的视图控制器的 UINavigationController
。https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html
UINavigationController
中有三个视图控制器A
、B
和C
,还是有三个UINavigationController
分别通过-presentViewController:animated:completion:
呈现? - Jeffery Thomas[self presentViewController: navController animated: TRUE completion:^ {}];
呈现为 UINavigationControllers。NavA 是根视图控制器。 - alexgophermix