Как скрыть панель навигации с одного конкретного контроллера представления
Я создал приложение для iPhone с двумя заставками. После этого пользователь сначала открывается. Я добавил UINavigationController. Он отлично работает.
Как удалить панель навигации только для открытия?
MainWindow
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.splashScreen = [[SplashScreen alloc]
initWithNibName:@"SplashScreen"
bundle:nil];
if (self.pageController == nil) {
openingpage *page=[[openingpage alloc]initWithNibName:@"openingpage" bundle:[NSBundle mainBundle]];
self.pageController = page;
[page release];
}
[self.navigationController pushViewController:self.pageController animated:YES];
[window addSubview:splashScreen.view];
[splashScreen displayScreen];
[self.window makeKeyAndVisible];
return YES;
}
Ответы
Ответ 1
Попробуйте этот метод внутри контроллера представления:
// swift
self.navigationController?.setNavigationBarHidden(true, animated: true)
// objective-c
[self.navigationController setNavigationBarHidden:YES animated:YES];
Дополнительные пояснения:
UINavigationController
имеет свойство navigationBarHidden, которое позволяет скрывать/отображать панель навигации для всего контроллера навигации.
Давайте посмотрим на следующую иерархию:
--UINavigationController
------UIViewController1
------UIViewController2
------UIViewController3
Каждый из трех UIViewController имеет одинаковую панель навигации, поскольку они находятся в UINavigationController. Например, вы хотите скрыть панель для UIViewController2 (на самом деле не имеет значения, в какой именно), а затем написать в своем UIViewController2:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES]; //it hides the bar
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES]; // it shows the bar back
}
Ответ 2
Swift 4:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
navigationController?.setNavigationBarHidden(true, animated: true)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
navigationController?.setNavigationBarHidden(false, animated: false)
}
Ответ 3
Это работает для меня:
Swift 4
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: false)
}
//reappears navigation bar on next page
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: true)
}
Ответ 4
Лучше запомнить, если это было спрятано ранее:
private var navigationBarWasHidden = false
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Save if it was hidden initially
self.navigationBarWasHidden = self.navigationController?.isNavigationBarHidden ?? false
// Hide the Navigation Bar
self.navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Show the Navigation Bar
self.navigationController?.setNavigationBarHidden(self.navigationBarWasHidden, animated: animated)
}
Ответ 5
Используйте ниже кода одной строки, чтобы скрыть панель навигации в Swift3 и Swift4
navigationController?.setNavigationBarHidden(true, animated: true)
Показать навигационную панель
navigationController?.setNavigationBarHidden(false, animated: true)
Ответ 6
В С# или Xamarin.IOS,
this.NavigationController.NavigationBar.Hidden = true;
Ответ 7
Представить представление открытия модально или;
- не добавляйте его в свой навигационный контроллер
- представьте до навигационный контроллер.
- Как только все загрузится, откройте окно открытия и покажите навигационный контроллер (оба без анимации).
Взяв пример из этой темы: Как я могу отображать заставку больше на iPhone?
-(void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:splashView];
[NSThread detachNewThreadSelector:@selector(getInitialData:)
toTarget:self withObject:nil];
}
-(void)getInitialData:(id)obj {
[NSThread sleepForTimeInterval:3.0]; // simulate waiting for server response
[splashView removeFromSuperview];
[window addSubview:tabBarController.view];
}