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

Posted

技术标签:

【中文标题】将navigationBar背景图片设置为[UIImage new]后恢复【英文标题】:Restore navigationBar background image after setting it to [UIImage new] 【发布时间】:2014-02-28 08:51:16 【问题描述】:

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

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

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

现在我去任何其他地方时都会遇到问题,因为我的导航栏保持透明:

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

【问题讨论】:

在 viewWillDisappear 方法中添加导航栏图片。 【参考方案1】:

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

在你的地图视图中设置这两种方法

地图视图.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];

【讨论】:

@budidino:很高兴为您提供帮助:) viewWillDisappear 是重点!我用 viewDidDisappear,它是错误的!希望可以节省别人的时间。 有没有人在这个过渡过程中遇到导航栏变黑的情况? 它不能与 ios 11 中的大标题一起使用 - 希望能修复一个错误。 [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault] 不恢复状态栏。 @turingtested 你找到大标题导航栏的解决方案了吗?【参考方案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

【讨论】:

【参考方案3】:

顺便说一句,你可以通过函数获取原始背景图片

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

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

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

设置它,但大多数时候,设置为 nil 会解决你的问题。

【讨论】:

以上是关于将navigationBar背景图片设置为[UIImage new]后恢复的主要内容,如果未能解决你的问题,请参考以下文章

navigationBar上的一些操作

iOS 设置navigationBar背景

导航栏UINavigationController

iOS 11 的 Refresh Controller 和 navigationBar 问题将 prefersLargeTitles 设置为 true

有没有修改过android 4.22 NavigationBar的黑色背景为半透颜色

iOS11中navigationBar上 按钮图片设置frame无效 不受约束 产生错位问题 解决