2016-10-06 10 views
-2

У меня есть простая иерархия навигации, которая имеет 2 вида, между которыми она находится. Мне нужна настраиваемая панель навигации, поэтому я по умолчанию скрыт, и я реализовал Container View, который разделяет между двумя представлениями в иерархии nav.Как поделиться просмотром через иерархию навигации без анимации?

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

Есть ли простой способ сделать это? Или я должен удалить свой пользовательский общий контейнерный просмотр и попытаться сделать эту работу с панелью навигации (которую я сейчас скрываю)?

+0

Похоже, что лучший способ сделать то, что я пытался сделать, было бы просто стиснуть зубы и узнать, как настроить по умолчанию Navigation Controller (изменить его высоту, и добавить пользовательские кнопки). Однако теперь я попытаюсь выполнить свое приложение с несколькими перекрывающимися представлениями контейнера, которые я могу показывать на экране и за его пределами, поскольку, поскольку это не вызывает каких-либо непредвиденных новых проблем, это подход, который я уже очень хорошо знаю и я получу внешний вид. – PlateReverb

ответ

1

Я должен был сделать это для клиента один раз. То, как мы это делали, было, как вы сказали, созданием всеобъемлющего контроллера представлений, в котором размещался контейнер. В этом представлении контейнера мы вложили UINavigationController и вручную поместили его и нажмут UIViewController s в его стек навигационной панели. Конечно, вы хотите скрыть навигационную панель UINavigationController.

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

Мнение: Лично я бы порекомендовал против. Я считаю, что приложение должно выглядеть как расширение ОС, на котором оно работает. Пользователь должен чувствовать, что это часть их телефона. Использование собственной навигационной панели также снижает уровень усилий, которые требуется пользователю для понимания вашего приложения.

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

+0

У меня нормальная настройка UINavigationController между 2 VC. Каждый VC содержит встроенный контейнерный вид того же размера, который связан с одним и тем же VC через встроенные сегменты. Я пошел по этому маршруту, потому что я не знал, как настроить размер и добавлять кнопки в навигационную панель по умолчанию, и до сих пор он работает точно так, как я хочу, за исключением того, что я не хочу, чтобы он реанимировал, когда перебирался вверх и вниз стек навигатора. Что касается эстетики, то только разница между «квази-навигационной панелью» и «навигационной панелью» в контейнере - это немного меньше по высоте. – PlateReverb

+0

Где находится ваш код для скрытия навигатора? @PlateReverb – Zolnoor

+0

Внутри обоих классов View Controller – PlateReverb

1

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

Это ваша ошибка. Способ получения настраиваемой навигационной панели в интерфейсе UINavigationController - инициализировать ее с помощью init(navigationBarClass:toolbarClass:). Теперь встроенный контроллер навигации использует вашу навигационную панель! И оттуда все будет хорошо.

https://developer.apple.com/reference/uikit/uinavigationcontroller/1621866-init

+0

Моя «настраиваемая панель навигации» на самом деле представляет собой отдельный просмотр в контроллере представления, который совместно используется различными видами навигационного стека через отдельные встроенные представления контейнеров на VC уровня. – PlateReverb

+0

Где эта инициализация должна быть расположена? Возможно ли инициализировать представление контейнера или контроллер просмотра, у него есть встроенное segue-соединение с навигационной панелью? или мне придется создать пользовательскую панель навигации каким-то другим способом? – PlateReverb