一次解除多个模态视图控制器时的视觉伪像

ale*_*mix 9 objective-c uiviewcontroller modalviewcontroller ios

我一直在努力寻找这个问题的答案.我通过以下方式构建了一堆模态:

[[[NavA viewControllers] objectAtIndex:0] presentViewController:NavB animated:YES completion:NULL];
[[[NavB viewControllers] objectAtIndex:0] presentViewController:NavC animated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

当我想同时解雇NavANavB模态时,我打电话给

[[[NavA viewControllers] objectAtIndex:0] dismissViewControllerAnimated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,除了有一个简短的闪存,你可以看到NavB,因为完整的堆栈被解雇了.

我走过了调试器,看起来在动画开始之前,NavC立即消失,NavB用动画解散.

有没有办法避免这种视觉神器,并且整个堆栈在动画的整个持续时间内可以使NavC平滑地消失

编辑:为了澄清,我提出的UINavigationController不是UIViewController因为这个流程是供用户登录的,而且有多个可能的分支可以返回到当前阶段,例如NavC(LoginPage),NavB(带登录和注册按钮的LandingPage)或所有返回根目录,NavA(应用程序的主页面).在iOS文档中,它们呈现了与相机类似的设计模式,其中每个舞台呈现UINavigationController多个可能的视图控制器https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

Chr*_*orr 2

您可以伪造动画,使其看起来完全符合您的意愿:

  • 弹出/关闭 B 和 C,动画
  • 推/呈现 C ,不带动画
  • 使用您想要的任何动画弹出/关闭 C