在横屏模式下,UIPopoverController 中的 UINavigationController 的“返回”动画表现奇怪

16
我被难住了 :-\
我有一个遗留的应用程序在商店里,我正在为iOS 8/9更新它。它是多年前(ARC之前)编写的,是iPhone和iPad的通用应用程序。现在除了这个问题,一切都正常...
在iPad上,屏幕顶部有一个工具栏,其中我呈现UIPopoverControllers,其中包含一些标准的UITableViewController类型屏幕,您可以深入了解。
在纵向模式(和倒置纵向模式)下,一切都按预期工作。
但是,在横向模式下,按下“返回”(标准返回而不是自定义返回)会导致奇怪的动画-离开的控制器跳出弹出窗口并快速滑出屏幕(方向由设备的方向决定),而进入的控制器则只是在离开的控制器跳出弹出窗口后立即出现。我必须使用缓慢的动画来确定这一点,因为以全速运行它看起来就像一个巨大的故障。
这里有一个短片20 second movie showing the defect here; 注意在14秒时点击“位置”时发生的情况。
如果我将VC堆栈作为表单表格呈现,而不是UIPopover,则无论方向如何,一切都按预期工作。我还尝试了较新的UIPopoverPresentationController,并遇到了相同的问题,这让我有点惊讶。
这在我呈现的两个弹出窗口(一个从工具栏左侧,一个从工具栏右侧)上发生,它们的内部非常不同。唯一的共同因素是它们都有一个UINavigationController在UIPopover中。
我使用视图调试器检查了视图层次结构,但没有发现异常,无论我以多慢的速度运行模拟器,都无法在故障期间捕获视图,因此我怀疑我看到了popover或navigation controller的内部问题。
有人见过类似的情况吗?我在iOS 8.4的设备和iOS 8和9的模拟器上都看到了这个问题。
为了背景,该项目没有storyboards,很少使用xibs,并且通常在loadView中使用代码构建UI-它确实是一个旧应用程序...
感谢任何指针。不确定任何代码会有多大帮助,但这里是相关弹出窗口的演示;

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];

我使用以下新的代码时遇到了同样的缺陷;

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];

当我使用 UIModalPresentationPageSheet 时,遇到了同样的问题,但是当我使用 UIModalPresentationFormSheet 时没有这个问题。


2
谢谢你的随意莫名其妙的负评 :-/ - Roger
这是在所有iOS 8.X和9.X版本中都发生吗?可能是一个操作系统的错误。 - Lefteris
当我深入UITableViewController代码时,我看到了类似的东西。我认为很明显这个错误发生是因为你回退了两个级别。下钻操作实际上将表格向左移动并移出视图。回退导致表格从其当前位置开始向右移动,因此出现了错误。我不太确定如何回答这个问题,但会尝试像弹出表格下钻一样进行弹出操作。 - Roy Falk
1个回答

1

我遇到了同样的问题。在导航控制器中添加对视图控制器横向方向的支持后,问题得以解决。

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接