我最近遇到了iOS视图控制器遏制问题。
除了一个特殊情况外,一切都按预期工作:
这种边缘情况可能出现,例如如果您创建并包含子VC作为异步网络调用的结果,该调用可能位于父视图的viewWillAppear和viewDidAppear之间。
我在这里放了一个演示:https://gist.github.com/cellularmitosis/8205610a80112eebd96c
要在本地重现,请在Xcode中创建一个新的“单视图应用程序”iOS项目,然后用上面的要点替换ViewController.swift的内容。
我是否遗漏了一些明显的东西,或者这是苹果公司的一个错误?
我猜这意味着我需要覆盖shouldAutomaticallyForwardAppearanceMethods()以返回false,然后手动调用beginAppearanceTransition和endAppearanceTransition?
答案 0 :(得分:0)
跟进:这是我目前正在使用的解决方法:https://gist.github.com/cellularmitosis/56d734ab087a3f283455
我实现了一个视图控制器转换状态跟踪器,如果父VC位于viewWillAppear和viewDidAppear之间,那么我们对shouldAutomaticallyForwardAppearanceMethods回答false。
containsChildViewController已更新为处理shouldAutomaticallyForwardAppearanceMethods的true和false。
绝对是一个kludge,但似乎有效。
TODO:viewWillDisappear期间可能存在类似的错误 - > viewDidDisappear过渡。我没有检查过。
编辑:编辑了变通方法要点,使用beginAppearanceTransition / endAppearanceTransition而不是直接调用viewWillAppear / viewDidAppear