mAu*_*mAu 5 cocoa-touch uikit ios
给出以下视图控制器布局.
我们通过首先呈现构建模态视图控制器的堆叠B上A,然后呈递C上B.根据Apple文档dismiss(animated:completion:),调用它A应该实际上C以动画方式关闭最顶层的视图控制器(在这种情况下)和所有没有动画的中间视图控制器.但是,C如果没有动画就会被解雇,并B以动画方式被解雇.
在浏览网页并尝试各种"解决方案"后,很明显这是iOS中的一个实际错误.它自iOS 8以来一直存在......并且仍然存在于iOS 10中.它最初是在iOS 8中报告的,但该解决方案从未经过验证,并且Apple由于不活动而自动关闭雷达.
我提交了一个新的雷达,因为这与文档的内容完全矛盾 dismissViewController
如果连续呈现多个视图控制器,从而构建一堆呈现的视图控制器,则在堆栈下方的视图控制器上调用此方法(均值 - [UIViewController dismissViewControllerAnimated:completion])会解除其直接子视图控制器和上面的所有视图控制器那个孩子在堆栈上.发生这种情况时,只有最顶层的视图以动画方式被删除; 任何中间视图控制器都可以从堆栈中删除.
明确问题的可视化,包括预期结果和实际结果.感谢鲍里斯Survorov的测试项目和可视化.
我猜你从A到B的segue也是模态的?在这种情况下,dismiss从 A 调用的函数想要关闭视图,该视图位于 A 之上,即 B。C 只是被隐藏,以便向您显示 B 的动画隐藏。从这个意义上说,您不能通过模态堆叠视图dismiss如果您回溯到那么远,则会继续并使用您所描述的功能来消除最上面的一个。如果 B 调用来解雇 C,则该函数dismiss将按预期工作。