将navigationBar背景图像设置为[UIImage new]后恢复

bud*_*ino 22 objective-c uinavigationbar uinavigationcontroller ios

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

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

在此输入图像描述

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

Tos*_*lji 52

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

在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];
}
Run Code Online (Sandbox Code Playgroud)

  • 它不能与iOS 11中的大型游戏一起使用 - 希望是一个可以修复的错误.`[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]`不恢复状态栏. (15认同)
  • 有没有人在这次过渡中体验导航栏变黑的瞬间? (11认同)
  • viewWillDisappear就是重点!我用了viewDidDisappear,它错了!希望可以节省其他时间. (4认同)
  • @turingtested您是否找到了大型标题导航栏的解决方案? (2认同)

Hap*_*eki 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
}
Run Code Online (Sandbox Code Playgroud)