Восстановить фоновое изображение navigationBar после установки его на [UIImage new]

Мне понадобилась полностью прозрачная панель навигации для mapView, поэтому я сделал это:

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];

Это возвращает желаемый эффект, как показано здесь:

enter image description here

Теперь у меня есть проблема, когда я перехожу к любому другому, потому что мой navigationBar остается прозрачным:

enter image description here

Как восстановить настройки по умолчанию для background_mage и shadowImage navigationBar?

Ответы

Ответ 1

Установите nil для изображения навигации. Контроллер на viewWillDisappear на экране карты

Установите этот два метода в вашем mapview

MapView ого

-(void)viewWillAppear:(BOOL)animated{
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];
}

-(void)viewWillDisappear:(BOOL)animated{
    [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:nil];
}

Ответ 2

Для Swift 3:

override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)

  self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
  self.navigationController?.navigationBar.shadowImage = UIImage()
}

override func viewWillDisappear(_ animated: Bool) {
  super.viewWillDisappear(animated)

  self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
  self.navigationController?.navigationBar.shadowImage = nil
}