В большинстве моих приложений у меня есть собственный класс UIViewController, из которого я извлекаю все другие пользовательские контроллеры. В некоторых из них я добавил метод типа navigationBarInitiallyHidden
в базовый класс, который другие классы могут переопределять. Результат по умолчанию зависит от характера приложения.
В делегате контроллера навигации, когда показывается контроллер, реализующий этот метод, делегат скрывает или показывает контроллер навигации соответственно. Поскольку я анимирую скрытие или отображение, я проверяю текущее состояние и ничего не делаю, если не требуется никаких изменений.
Вы можете сделать что-нибудь попроще в своем методе делегата. Если показанный контроллер является корневым контроллером, скройте панель навигации, в противном случае покажите ее, если она скрыта.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ( viewController == rootController ) {
[navigationController setNavigationBarHidden:YES animated:animated];
} else if ( [navigationController isNavigationBarHidden] ) {
[navigationController setNavigationBarHidden:NO animated:animated];
}
}