Как скрыть панель навигации с одного конкретного контроллера представления

Я создал приложение для 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];
}