Контроллер Push/Pop View с навигационной панелью от контроллера просмотра без панели навигации
Я пытаюсь нажать контроллер вида с видимой навигационной панелью с контроллера просмотра со скрытой навигационной панелью.
Я пробовал всевозможные комбинации [[self navigationController] setNavigationBarHidden:YES animated:NO];
в viewWillAppear, viewDidAppear, viewWillDisappear... и т.д.
// First View Controller
@implementation FirstViewController
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[self navigationController] setNavigationBarHidden:YES animated:NO];
NSLog(@"[%@ viewWillAppear]", self);
}
@end
// Second View Controller
@implementation SecondViewController
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[self navigationController] setNavigationBarHidden:NO animated:NO];
NSLog(@"[%@ viewWillAppear]", self);
}
@end
Ничего не получилось. Я также пробовал настраиваемый код для "анимации" push и pop, который работает, НО я теряю салфетки и просматриваю панорамирование. Прежде чем я углубится, просто хочу убедиться, что я не изобретаю колесо.
Приложение Starbucks - это то, что я пытаюсь подражать.
Контроллер корневого представления приложения (вид темного фона) отображается в полноэкранном режиме и замечает, что у него нет UINavigationBar. Но когда вы нажимаете одну из кнопок, она нажимает на контроллер вида (светлый вид фона) с UINavigationBar. Оттуда, если вы нажмете стрелку "назад", она увидит, что контроллер вызывается навигационной панелью. Также работает интерактивный жест прокрутки.
![Starbucks iOS App]()
Ответы
Ответ 1
Можно без взлома решения самостоятельно. Вот что вы делаете:
Корневой viewController:
@implementation ViewController
....
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
@end
И нажатый viewController:
@implementation SecondViewController
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
@end
Это будет сделано. Он также поддерживает интерактивный переход;)
Мне кажется, что беспокоит, однако, что этот тип функциональности вообще не документирован яблоком. - Вы также можете скрыть и отобразить панели инструментов с этими "точками вызова" (внутри viewWillAppear:)
ИЗМЕНИТЬ
Я только понял, что это тот же код, который вы написали в своем вопросе. Повторите пробную проверку. Я на 100% уверен, что это работает - я использовал эту функцию в одном из моих приложений.
Также обратите внимание, что мой код использует animated:animated
вместо вашего animated:NO
. Это может быть решающим моментом здесь:)
Ответ 2
Я просто настроил два контроллера представления, чтобы проверить это взад и вперед.
@interface VC1 ()
@end
@implementation VC1
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = YES;
}
@end
и второй
#import "ViewControllerTwo.h"
@interface ViewControllerTwo ()
@end
@implementation ViewControllerTwo
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = NO;
}
@end
VC1 встроен в navigationController (который является корневым контроллером для приложения), с кнопкой, которая перемещается в ViewControllerTwo. У меня есть push-сег из VC1 → ViewControllerTwo, этот метод работает. Когда я нажимаю на кнопку, контроллер вида виден на ViewControllerTwo, когда я нажимаю назад, навигационная панель исчезает.