问题 视图以模态视图动画而非显示(推动)动画显示


我最近将我的应用程序从iOS 8.3更新为iOS 9。 在使用代码修复各种错误后,我设法编译应用程序并运行它,当我注意到以下问题。

当我执行segue点击(例如,UIButton)时,加载了segue的视图会显示模态视图的动画(从底部滑动直到它到达顶部),但在故事板中,segue是 Show (e.g. Push)。此外,导航控制器的后退按钮不再出现。

当我执行segue时控制台打印出来:

Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController: 0x7ffde14866b0>)

这个问题似乎只出现在视图中,当加载其他视图时,我试图将其他视图设置为初始视图控制器并且所有视图都有效。


5596
2018-06-23 14:46


起源

请发布被调用的代码以使用意外动画呈现新视图控制器。 - ndmeiri
@ndmeiri实际上没有代码:我用故事板做了一个segue。 - Qubex_
两个视图控制器都在同一个Storyboard中吗?您是否确保该Storyboard中的初始视图控制器设置为UINavigationController? - ndmeiri
是的,它们是,并且NavigationController现在设置为初始视图控制器,但事情不会改变。如果在视图之前删除导航控制器,则一切似乎都正常。 - Qubex_
我遇到了同样的问题。按照以下建议删除备用导航控制器可以解决问题,但它似乎更像是一种解决方案而不是解决方案。 Apple开发者论坛上有很多人建议它可能是一个bug。 forums.developer.apple.com/thread/4201 - Erik


答案:


在看了项目中的Storyboard之后,我发现问题是由于每个Push segue之后的额外导航控制器。也就是说,除了初始(根)导航控制器之外,Storyboard还包含一个 UINavigationController 作为有问题的Push segues的目的地。删除这些额外的导航控制器(但保留根导航控制器)解决了这个问题。


14
2018-06-23 17:07



我遇到了相同的控制台错误消息,但请注意以下内容:segues to navigation controllers必须保留,因为它们与拆分视图控制器一起使用(到详细视图控制器); (因此)代码不需要展开segues(代码也包括用于在父视图中设置值的块);并通过使用以下代码行抑制控制台错误消息 viewDidLoad... [self.searchController loadViewIfNeeded]; (请注意iOS 9提供)。 - andrewbuilder