将navigationBar背景图像设置为后恢复

我需要一个完全透明的mapView导航栏,所以我这样做:

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

这会返回所需的效果,如下所示:

在此处输入图像描述

现在,当我去其他任何地方时我遇到了问题,因为我的navigationBar仍然是透明的:

在此处输入图像描述

如何恢复navigationBar的backgroundImage和shadowImage的默认设置?

在地图视图上的viewWillDisappear上为导航控制器的图像设置nil

在mapview中设置这两个方法

MapView .m

 -(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]; } 

对于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 } 

顺便说一句,你可以通过使用函数获得原始背景图像

 UIImageView *imageView = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault]; 

并将图像存储在某处,然后使用

 [self.navigationController.navigationBar setBackgroundImage:imageView forBarMetrics:UIBarMetricsDefault]; 

将其设置回来,但大多数时候,设置为nil将解决您的问题。