Нет поп-анимации в iOS 13 - PullRequest
       12

Нет поп-анимации в iOS 13

0 голосов
/ 14 февраля 2020

У меня есть старое приложение, которое я пытаюсь обновить, чтобы исправить ошибку, появившуюся в 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 из этого проекта и другим проектом, у которого нет этой проблемы, и были различия в таких вещах, как настройки компилятора или битовый код, но, похоже, ничего не относилось к этой проблеме.

1 Ответ

1 голос
/ 14 февраля 2020

Здесь происходит больше, чем вы нам рассказываете. Я попробовал то, что вы описали, используя контроллер навигации в качестве встроенного контроллера представления, и он отлично работает. Как видите, мы анимируем Back в хорошем порядке (для ясности я включил Slow Animations):

enter image description here

«Несбалансированный переход» вызывает звук важно, но вы не предоставили никакой информации для выяснения причин их возникновения.

...