В моем приложении есть серия контроллеров UIViewController.У большинства из них есть панель навигации, но некоторые скрывают ее.
Проблема в том, что иногда при переходе между видом с панелями навигации или без него на другой вид с панелями навигации или без них появляется черный ящик, который заменяет панель навигации во время перехода.Эта проблема обсуждалась здесь: Скрытие UIToolbar UINavigationController во время viewWillDisappear:
Это решение хорошо, и оно действительно избавляется от черного ящика, но я действительно не хочу то, что было описано какисчезновение "Чеширского кота".Я пробовал множество решений с использованием prepareForSegue, ViewWillAppear, viewWillDisappear и т. Д. Лучшее, что я могу сделать, это изменить сценарий, в котором появляется черная полоса.
Под этим я подразумеваю четыре комбинации переходов представлениямежду двумя состояниями панели навигации (скрытое и не скрытое):
- Скрыто - Скрыто
- Скрыто - Не скрыто
- Не Скрыто - Скрыто
- Не скрыто - Не скрыто
Независимо от того, какое решение я пробовал, по крайней мере одна из этих комбинаций приводит к тому, что мой черный ящик поднимает свою уродливую голову.Проблема, с которой я столкнулся, заключается в том, что я нигде не смог найти ссылку на контроллер представления источника и контроллер представления назначения при выталкивании вида из стека представления контроллера навигации.
Если бы я мог получить обе ссылки в одном и том же событии, я мог бы просто определить, что такое комбинация, и обработать поведение соответствующим образом, как при подготовке к переходу.
Теперь я знаю, что «это невозможно» - разумный (и даже вероятный) ответ , но я не приму это как решение в одиночку,Если это действительно невозможно, я хотел бы подумать о разумной альтернативе.Например, я мог бы вручную обрабатывать все действия контроллера представления (включая кнопку возврата по умолчанию) и, таким образом, получать «предстоящий контроллер» из стека контроллера навигации.
Я бы просто предпочел решение с использованием встроенных API илипо крайней мере, решение, в котором мои контроллеры не должны были знать о своих собственных состояниях панели навигации.
Большое спасибо, Патрик