UIPopoverController里面的UINavigationController'Back'动画在Landscape中很奇怪

Rog*_*ger 16 uinavigationcontroller ipad uipopovercontroller ios

我很难过: -

我在商店里有一个遗留应用程序,我正在为iOS 8/9刷新.它是几年前写的(前ARC),是iPhone和iPad的通用应用程序.现在一切都在这个......

在iPad上,屏幕顶部有一个工具栏,我提供了一个UIPopoverControllers,其中包含一个UINavigationController,其中包含一些您可以深入查看的标准UITableViewController类型屏幕.

在Portrait(和Portrait Upside Down)中,一切都按预期工作.

然而,在风景中,按下"返回"(标准背面而不是自定义背景)会导致奇怪的动画 - 输出控制器跳出弹出窗口并快速滑出屏幕(方向受设备所在的方向控制),而输入控制器只是一旦外出控制器跳出弹出窗口,就会立即出现.我不得不使用慢动画来确定这是全速,它看起来像一个巨大的故障.

有一个短短20秒的电影显示这里的缺陷 ; 请注意在14秒内点击"位置"时会发生什么.

如果我将VC堆栈作为表单而不是UIPopover,那么无论方向如何,一切都按预期工作.我也尝试过更新的UIPopoverPresentationController并遇到了同样的问题,这让我感到很惊讶.

这种情况发生在我正在呈现的两个弹出框中(一个来自工具栏左侧,一个来自工具栏右侧),它们都有非常不同的内部结构.唯一的共同因素是它们在UIPopover中有一个UINavigationController.

我已经使用视图调试器来检查视图层次结构,但似乎没有什么不寻常的,我无法在故障期间捕获视图,无论我运行模拟器有多慢,所以我怀疑我看到了内部问题弹出窗口或导航控制器.

有没有人见过类似的东西?我在设备上(iOS 8.4)和iOS 8和9的模拟器中都看到了这一点.

对于上下文,这个项目没有故事板,很少使用xib并且通常在loadView中的代码中构建UI - 它实际上是一个旧的应用程序...

谢谢你的任何指示.不确定任何代码在这里会有多大帮助,但这里有关于popover的介绍;


LocationsViewController* locationsvc = [[LocationsViewController alloc] init];

UINavigationController *localNavigationController = [[UINavigationController alloc] initWithRootViewController:locationsvc];
localNavigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
[locationsvc release];

UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:localNavigationController];

aPopover.delegate = self;
aPopover.backgroundColor = [UIColor colorWithWhite:0 alpha:0.9];
self.locationPopoverController = aPopover;        
[aPopover release];
[localNavigationController release];

[locationPopoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
Run Code Online (Sandbox Code Playgroud)

我用下面的新口味代码得到同样的缺陷;


UINavigationController *destNav = [[UINavigationController alloc] initWithRootViewController:locationsvc];

locationsvc.preferredContentSize = CGSizeMake(320,280);

UIPopoverPresentationController *newPresentationController;
destNav.modalPresentationStyle = UIModalPresentationPopover;
newPresentationController = destNav.popoverPresentationController;
newPresentationController.barButtonItem = sender;
destNav.navigationBarHidden = NO;
[self presentViewController:destNav animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

当我使用UIModalPresentationPageSheet但是当我使用UIModalPresentationFormSheet时,不会出现同样的问题.

小智 1

我遇到过同样的问题。在我添加了对横向方向的支持以在导航控制器内查看控制器后,该问题得到了解决。

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}
Run Code Online (Sandbox Code Playgroud)