У меня есть старое приложение, которое я пытаюсь обновить, чтобы исправить ошибку, появившуюся в iOS 13. К сожалению, обновление до iOS 13 SDK вызвало несколько других ошибок. Я исправил их все, в основном путем настройки файла info.plist, за исключением этого.
Я использую стандартный UINavigationController
для отображения серии табличных представлений. Когда я щелкаю строку таблицы, это вызывает от pushViewController:animated:
до go к следующему представлению. Это выглядит хорошо и анимируется правильно, но консоль показывает сообщение «Несбалансированные вызовы для начала / конца переходов внешнего вида» для представления, которое я покидаю.
Когда я нажимаю кнопку «Назад» или проводите слева направо прямо на виде, предыдущий вид появляется сразу, без анимации. Консоль снова отображает предупреждение «Несбалансированные вызовы для начала / окончания появления переходов» для исходящего представления. Панель навигации анимируется правильно, переходя от старого вида к новому, но вид не анимируется. Я получаю такое же поведение, если я перемещаюсь назад, проводя На самом деле, если я проведу пальцем назад очень медленно, представление всплывает сразу же, как только начинается движение, вместо того, чтобы медленно перетаскивать старый вид на место, когда я двигаю пальцем.
Я нашел много сообщений, где это происходит, когда размещение контроллера навигации в контроллере панели вкладок, что я не делаю, или когда программно нажимаю представления, что я не делаю. Я проверил, что каждое переопределение viewWillAppear
или viewDidAppear
вызывает его суперкласс, и у меня нет несовпадающих вызовов (вызов super viewDidAppear
из viewWillAppear
или наоборот).
Я не использую раскадровки, просто старый код цели C с методом pushViewController
. Я настраиваю и помещаю контроллер навигации программно в контроллер представления контейнера, например так:
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 из этого проекта и другим проектом, у которого нет этой проблемы, и были различия в таких вещах, как настройки компилятора или битовый код, но, похоже, ничего не относилось к этой проблеме.