Вместо того, чтобы UINavigationController был дочерним по отношению к какому-либо другому контроллеру представления, сделайте UINavigationController самим корневым контроллером. Контроллер навигации является одним из специальных контроллеров представления «контейнер», и он, как правило, хочет владеть всем экраном и находиться в корне иерархии контроллеров (за исключением определенных обстоятельств).
Попробуйте что-то вроде этого:
UINavigationController * rootNavController = [[UINavigationController alloc] initWithRootViewController:myRootControllerInTheNavController];
[window addSubview:[rootNavController view]];
Который будет скрывать любые существующие виды с помощью контроллера Nav (эти существующие вещи будут все еще там, когда вы -removeFromSuperview
видите контроллер Nav). Ядерная опция состоит в том, чтобы установить свойство rootViewController
вашего UIWindow с помощью контроллера nav, но из вашего комментария звучит, что это может быть не то, что вы хотите сделать здесь.
Возможно, более чистый подход: если он выполняет то, что вы хотите, я полагаю, вы также можете взять свой контроллер nav и представить его модально (см. Документацию для uiviewcontroller) из любого текущего контроллера представления. Установите переход соответствующим образом, и пока вы находитесь в стеке навигации, контроллер навигации будет виден.