контроллер модального представления анимируется при восстановлении состояния

У меня странная проблема с восстановлением состояния для универсального приложения с контроллером разделенного представления.

Странно, что я делаю все очень стандартным образом, используя раскадровку и переходы, а также с идентификатором восстановления для всех соответствующих контроллеров представления. Кода на самом деле нет, так как логика находится в раскадровке, и минимальный проект XCode показывает это.

Проблема связана с экраном настроек, который отображается модально в виде листа формы, представленного из контроллера разделенного представления. Моя иерархия контроллера представления оказывается правильной, но переход на самом деле не имеет смысла. По какой-то причине восстановление состояния анимирует модальный контроллер на место.

Поскольку экран начинается со снимка экрана, сделанного во время последнего запуска приложения, с уже присутствующим контроллером настроек, анимация представляет собой просто визуальный шум.

Я попытался отключить анимацию в переходе, которая соблюдается при интерактивном входе в настройки, но когда восстановление состояния делает то же самое, анимация присутствует.

Каков стандартный способ избежать этого?


person palmin    schedule 22.08.2016    source источник


Ответы (1)


Звонок self.window?.makeKeyAndVisible() в application(_:willFinishLaunchingWithOptions:) решил проблему для меня.

Дополнительная информация в документах:

Важно

Если ваше приложение полагается на механизм восстановления состояния для восстановления своих контроллеров представления, всегда показывайте окно вашего приложения из этого метода. Не показывать окно в методе application:didFinishLaunchingWithOptions: вашего приложения. Вызов метода окна makeKeyAndVisible в любом случае не делает окно сразу видимым. UIKit ждет, пока метод application:didFinishLaunchingWithOptions: вашего приложения не завершится, прежде чем сделать окно видимым на экране.

person Franco Solerio    schedule 17.04.2017
comment
Я действительно скептически относился к этому, но я впечатлен тем, насколько хорошо это сработало. Большое спасибо! До этого мы проверяли, были ли созданы предыдущие вьюконтроллеры, путем восстановления и отключения их нынешней анимации. - person Paulo Cesar; 22.02.2018
comment
В моем случае я нигде не вызывал self.window.makeKeyAndVisible(), но устанавливал window.rootController в методе application:didFinishLaunchingWithOptions:. Перемещение этого на application:willFinishLaunchingWithOptions: помогло. Спасибо! - person Bruce Geerdes; 27.08.2019
comment
Это решение отлично подходит для iOS 12, но невозможно для iOS 13, поскольку окно не задано в делегате приложения. Есть мысли, как это решение можно адаптировать для iOS 13 (с использованием сцен)? - person SAHM; 25.05.2020