我有一个旧应用程序,我正在尝试更新该应用程序以修复iOS 13中出现的错误。不幸的是,更新到iOS 13 SDK会引发其他一些错误。我已经修复了所有这些问题,主要是通过对info.plist文件的调整,除了这一件事。
我正在使用标准的UINavigationController
显示一系列表格视图。当我单击表格行时,将触发pushViewController:animated:
转到下一个视图。这看起来很好并且可以正确设置动画效果,但是控制台为我要离开的视图显示了消息“开始/结束外观转换的不平衡调用”。
当我单击后退按钮或在视图上从左向右滑动时,前一个视图将立即显示,没有动画。控制台再次为传出视图显示警告“开始/结束外观转换的不平衡呼叫”。导航栏可以正确设置动画,从旧视图淡入到新视图,但是该视图没有动画。如果我通过滑动向后导航,则会得到相同的行为。实际上,如果我非常缓慢地向后滑动,则滑动开始时视图会立即弹出,而不是在移动手指时将旧视图缓慢拖到适当位置。
我发现很多帖子,当我将导航控制器放在选项卡栏控制器中时(我没有这样做,或者以编程方式推送视图时,我没有这样做)。我检查过viewWillAppear
或viewDidAppear
的每个替代都调用其超类,并且没有不匹配的调用(从super viewDidAppear
调用viewWillAppear
,反之亦然)。
我不使用情节提要,只是使用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时其他人看到了吗?
UPDATE
为了消除容器视图中的任何问题,我临时更改了应用程序,将导航控制器直接放置在窗口中。所以我现在在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文件和其他没有问题的项目之间进行了比较,并且在编译器设置或位代码等方面存在差异,但似乎与此问题无关。