UINavigationController pushViewController:animated:展示奇怪的动画行为

时间:2013-09-27 14:24:14

标签: ipad animation uinavigationcontroller ios7 uipopovercontroller

我有一个现有的iOS应用程序,我正在移植到iOS 7.iPad版本在UINavigationController中使用UIPopoverController。初始视图控制器的显示工作正常。当我使用动画= YES的pushViewController:animated推动另一个视图控制器时,新控制器将按照预期从右侧动画显示,然后它就好像它已被弹起并弹回到位。与此同时,弹出控制器变得更大。

如果我关闭动画,我仍然会调整大小但不会反弹。但是我也没有得到新视图控制器的演示动画。

此时我正在寻找线索。我发布了代码,但这很复杂,因为这一切都在iPhone和iPad上运行,并自动检测是否需要在新的导航控制器中显示视图控制器,以及该导航控制器是否需要出现在弹出控制器中。而不是让它变得复杂,我正在寻找可能发生这种情况的想法,以便我可以追踪问题。

相同的代码在iOS 5和6中完美运行。

知道是否有人在iOS 7中成功执行此操作会很有趣 - 只需在UINavigationController中显示UIPopoverController并推送视图控制器而不会看到此行为。

3 个答案:

答案 0 :(得分:3)

问题原来是contentSizeForViewInPopover

我们的UINavigationController子类实现了这个方法来告诉包含UIPopoverController它应该有多大。在7之前的所有iOS版本中都记录了绝对的工作原理。它不仅在7中被弃用,它还会导致上述问题。

解决方案是在iOS 7中返回popoverController.contentViewController.view.bounds.size并重新执行所有视图,使其适合弹出框,而不是调整窗口大小以处理视图。

另一个解决方案可能是摆脱导航控制器,只需关闭弹出控制器并以新的尺寸重新显示一个新的控制器。

感谢您一起阅读。总有一天我会试着问一个人可以回答的问题。

答案 1 :(得分:1)

我有完全相同的问题,然后我意识到问题是来自键盘隐藏,所以我在导航控制器推动下一个视图之前辞去文本字段第一响应者。

答案 2 :(得分:0)

如Craig所述,iOS 7中不推荐使用contentSizeForViewInPopover。
  popoverContentSize UIPopoverController的属性。此属性表示由UIPopoverController的contentViewController属性中的视图控制器管理的内容视图的大小。   Reference