从 UINavigationController (IOS 5) 弹出 UIViewController 时出现奇怪的动画

Posted

技术标签:

【中文标题】从 UINavigationController (IOS 5) 弹出 UIViewController 时出现奇怪的动画【英文标题】:Weird animation when popping an UIViewController from an UINavigationController (IOS 5) 【发布时间】:2011-12-11 12:15:14 【问题描述】:

我正在实现一个容器视图控制器,其中屏幕的一部分是一个包含UINavigationController 视图的视图。我的viewDidLoad: 是这样的:

// ...
UIViewController *myNavigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyNavigationController"];
[self addChildViewController:myNavigationController];
[self.myContainerView addSubview:myNavigationController.view];
[myNavigationController didMoveToParentViewController:self];
// ...

旋转没有问题,将新的视图控制器推入导航控制器工作正常。但是当用户点击背面UIBarButtonItem 时,不仅仅是self.myContainerView 而是整个self.view 向上动画,类似于kCATransitionFromBottom,而不是正常的导航控制器弹出动画。经过几次调试后,我意识到我的视图控制器的 viewWillDisappear:viewWillAppear: 方法在从 myNavigationController 弹出时被调用。

不幸的是,我被困住了。如果有人能说明发生了什么以及如何解决这个问题,我将不胜感激。

编辑: 好吧,那算了。我忘了在我的导航控制器的一个孩子中实现shouldAutorotateToInterfaceOrientation:。返回YES 解决了这个问题。

【问题讨论】:

嗨,我认为这样做可能会为您自己的问题添加一个答案并将其标记为已回答,以便人们很容易看到它已被回答。 (虽然也许你还不能这样做......) 感谢您的提醒。一旦 *** 允许我,我会在明天标记已回答的问题。 我一直在为同样的问题扯头发。在我阅读了这个问题之后,这样一个明显的解决方案。谢谢! 天哪,谢谢!!这是一个 Apple 错误,因为如果未调用此 API,则不应为应用程序的窗口设置动画。你不觉得吗? 可能,或者可能只是未定义的行为。 UINavigationController 毕竟被设计成全屏的。我不知道 ios 5.1 和 iOS 6 中是否还会出现这种情况。 【参考方案1】:

好吧,没关系。我忘了在我的导航控制器的一个孩子中实现 shouldAutorotateToInterfaceOrientation: 。返回 YES 解决了问题。

【讨论】:

我遇到了同样的问题,就我而言,我只是忘记了 remove - (NSUInteger)supportedInterfaceOrientations return UIInterfaceOrientationMaskPortrait; 从 tableViewController

以上是关于从 UINavigationController (IOS 5) 弹出 UIViewController 时出现奇怪的动画的主要内容,如果未能解决你的问题,请参考以下文章

从 UINavigationController 切换到 UISplitviewController

从UINavigationController中控制UINavigationItem内容

从 UINavigationController 设置 UITabBarItem 标题?

如何从 UINavigationController 隐藏 UINavigationBar?

UINavigationController 内的 UIPageController 从顶部偏移?

从 UiviewController 切换到 UiNavigationController