Restore navigationBar background image after setti

2020-05-18 16:54发布

I needed a completely transparent navigation bar for the mapView so I did this:

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

That returns the desired effect, as seen here:

enter image description here

Now I have a problem when I go to any other because my navigationBar remains transparent:

enter image description here

How do I restore default settings of the navigationBar's backgroundImage and shadowImage?

3条回答
一夜七次
2楼-- · 2020-05-18 17:28

by the way, you get get the original background image by using function

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

and store the image somewhere, then you use

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

to set it back,but most time, set to nil will solve your problem.

查看更多
【Aperson】
3楼-- · 2020-05-18 17:29

For 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
}
查看更多
Evening l夕情丶
4楼-- · 2020-05-18 17:33

Set nil for image of navigation Controller on viewWillDisappear on map view

Set this two method in your 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];
}
查看更多
登录 后发表回答