0

Я ударяю головой о стену с проблемой navBar. См. Это sample project для лучшего представления о том, чего я пытаюсь достичь. В принципе, моя структура приложения выглядит так:Представление контроллера представления с overCurrentContext, а затем нажатие на результаты навигационного стека в нижней части панели навигации

NavController -root-> ViewControllerA -> button -> push -> ViewControllerB       --> ViewControllerC 
                   |          | 
                  button -> presentModally     | 
                   |          | 
                   V          | 
                 PopoverViewController      | 
                   |          | 
                  button -> push to the nav controller  | 
                   |          | 
                   |          | 
                   --------------------------------------- 

кнопку на контроллере второго вида (назовем его B) стека нав представит модальный контроллер представления с четким фоном (его модальный стиль презентации является overCurrentContext к выглядит как пирог):

ViewControllerB

Popover

Затем кнопка на пирог будет толкать новый контроллер представления в стек нав (назовем его C):

PresentingC

[ViewControllerC

поповер представлен B в отличие от фактического контроллера нав (В определяет контекст презентации). Это так, что когда popover нажимает C на стек, C не просто покрывает B, но также покрывает popover.

Проблема возникает при отклонении C. Навигационный стек возвращается к B с поп-апом наверху (что является моим намерением). Однако B теперь заполняет весь кадр контроллера навигационного представления (до того, как C был нажат, верх B был прикреплен к navBar). Это приводит к тому вид вблизи верхней части B, чтобы быть обрезано NavBar:

enter image description here

Взгляд на UI инспектор подтверждает, что это потому, что вид B теперь заполняет вид контроллера Nav в:

enter image description here

Это было не так, прежде чем C был представлен. Любые идеи относительно того, что вызывает это?

ответ

1

Вы вручную нажимаете контроллер представления на стек, который не имеет навигационного контроллера. Лучшим способом сделать это будет переход из контроллера просмотра B для просмотра контроллера C с использованием идентификатора segue. После настройки segue в раскадровке вы увидите, что контроллер C просмотра автоматически набирает навигационную панель. Возможно, вы захотите использовать метод делегата с контроллера popover view в B для запуска segue.

+0

Я пробовал это. Сделал «show» segue от B до C и использовал метод делегата от функции tap pop-tap до B, чтобы вызвать segue. Он по-прежнему ведет себя одинаково. Я также попытался установить B 'definePresentationContext' на' false'. Это решает, что C получает обрезание, но также приводит к тому, что popover будет отображаться навигационным контроллером, поверх всех дальнейших VC, нажатых в стек. Я попробовал переделывать разные «modalPresentationStyles» для popover, но «overCurrentContext», похоже, единственный, который удовлетворяет моим требованиям. – Hash88