我需要一个完全透明的mapView导航栏,所以我这样做了:
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
返回所需效果,如下所示:
现在,当我去其他任何地方时,我遇到了问题,因为我的navigationBar仍然是透明的:
如何恢复navigationBar的backgroundImage和shadowImage的默认设置?
答案 0 :(得分:51)
在地图视图上的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];
}
答案 1 :(得分:7)
对于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
}
答案 2 :(得分:0)
顺便说一句,你可以使用函数
获得原始背景图像UIImageView *imageView = [self.navigationController.navigationBar
backgroundImageForBarMetrics:UIBarMetricsDefault];
并将图像存储在某处,然后使用
[self.navigationController.navigationBar setBackgroundImage:imageView
forBarMetrics:UIBarMetricsDefault];
将其设置回来,但大多数时候,设置为nil将解决您的问题。