【问题标题】:No pop animation in iOS 13iOS 13 中没有弹出动画
【发布时间】:2020-05-30 13:02:37
【问题描述】:

我有一个旧应用程序正在尝试更新以修复 iOS 13 中出现的错误。不幸的是,更新到 iOS 13 SDK 触发了其他几个错误。我已经全部修复了,主要是通过调整 info.plist 文件,除了这一件事。

我使用标准的UINavigationController 来显示一系列表格视图。当我单击表格行时,会触发 pushViewController:animated: 转到下一个视图。这看起来很好并且动画正确,但控制台会为我要离开的视图显示消息“不平衡调用开始/结束外观转换”。

当我单击后退按钮或在视图上从左向右滑动时,上一个视图会立即出现,没有动画。控制台再次为传出视图显示警告“开始/结束外观转换的不平衡调用”。导航栏动画正确,从旧视图淡入新视图,但视图没有动画。如果我通过滑动导航回来,我会得到相同的行为。实际上,如果我非常缓慢地向后滑动,则视图会在开始滑动时立即弹出,而不是在我移动手指时慢慢将旧视图拖入到位。

我发现很多帖子在将导航控制器放置在标签栏控制器中时会发生这种情况,我没有这样做,或者以编程方式推送视图时,我没有这样做。我检查了viewWillAppearviewDidAppear 的每个覆盖都调用了它的超类,并且我没有不匹配的调用(从viewWillAppear 调用super viewDidAppear,反之亦然)。

我没有使用故事板,只是使用 pushViewController 方法的普通旧目标 C 代码。我确实以编程方式设置导航控制器并将其放置在容器视图控制器中,如下所示:

MainMenu *rootViewController = [[MainMenu alloc] initWithNibName:@"MainMenu" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
self.navigationController.delegate = self;
[self addChildViewController:self.navigationController];
[self.navigationController didMoveToParentViewController:self];
[self.view addSubview:self.navigationController.view];

当我在 iOS 12 设备上运行该应用程序时,它运行良好。该问题仅出现在 iOS 13 设备上。我有另一个应用程序,它使用相同的结构,最初是在同一时间构建的,但会针对 iOS 版本定期更新,它没有问题。我已经比较了我能想到的每个文件和设置,但找不到两个应用程序之间的相关差异。

有其他人在更新 iOS 13 时看到过这个吗?

更新

为了消除容器视图中的任何问题,我暂时更改了应用程序,将导航控制器直接放入窗口中。所以我现在在application:DidFinishLaunchingWithOptions: 中有这个:

MainMenu *mainMenu = [[MainMenu alloc] initWithNibName:@"MainMenu" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:mainMenu];
[self.window addSubview:self.navigationController.view];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];

然后,为了消除我正在导航到的视图控制器的任何问题,我制作了一个只包含一个空视图的新笔尖,在 MainMenu 中,当单击表格行时,我运行以下代码:

UIViewController *viewController = [[UIViewController alloc] initWithNibName:@"Empty" bundle:nil];
[self.appDelegate.navigationController pushViewController:viewController animated:YES];

然后我单击左上角的系统提供的后退按钮,MainMenu 重新出现,但没有动画和相同的控制台消息。我觉得这与我的项目设置有关,因为代码非常简单明了。我在这个项目的 project.pbxproj 文件和另一个没有问题的项目之间运行了一个差异,编译器设置或位码等内容存在差异,但似乎与这个问题无关。

【问题讨论】:

  • 这可能无关紧要,但强烈提及您的孩子self.navigationController 是危险的。参考是它在你的childViewControllers;做第二个强有力的参考可能会在以后给你带来麻烦。

标签: ios objective-c uinavigationcontroller


【解决方案1】:

这里发生的事情比您告诉我们的要多。我尝试了您所描述的,使用导航控制器作为手动嵌入的视图控制器,它工作正常。如您所见,我们以良好的顺序制作 Back 动画(为了清晰起见,我打开了慢速动画):

“不平衡过渡”调用听起来很重要,但您没有提供任何信息来发现可能导致它们的原因。

【讨论】:

  • 感谢您检查 UINavigationController 设置。我想不出任何其他相关的信息。正如我的问题中提到的,我已经阅读了几篇类似的 SO 帖子,但是这些帖子的解决方案要么不适用于这里,要么我已经在做。除了这是一个较旧的应用程序,Objective C,在故事板或自动布局之前构建,我认为我没有做任何特别或不寻常的事情,所以我不知道问题可能出在哪里。
  • 所以,看看你添加到你的问题的新事实,你有一个不同的应用程序“定期更新 iOS 版本,它没有问题”:你在构建一些旧版本的 Xcode 但在 iOS 13 下运行?也许这是相关的;我没有测试过(我只是在当前版本的 Xcode 中测试过)。
  • 好问题——它是 Xcode 11.2.1,与我用于其他没有问题的应用程序的版本相同。我假设我也使用相同的 SDK 版本,因为 Xcode 似乎不再允许您指定 SDK 版本。我将在构建设置中进行搜索,看看我能找到哪些差异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
相关资源
最近更新 更多