删除UINavigationBar上的背景图像

时间:2012-01-13 03:00:20

标签: ios uinavigationcontroller uiimage uinavigationbar

我的应用使用导航控制器,主页导航栏中有图像。背景图像是通过放置

完成的
[navigationController.navigationBar setBackgroundImage:navImage forBarMetrics:UIBarMetricsDefault];
[_window addSubview:navigationController.view];

在app委托中。导航栏显示此图像正常。

其他所有视图都会在导航栏中显示图片。因此,我需要在按下任何其他视图控制器时删除此背景图像。有谁知道如何做到这一点?

网上有很多关于添加或更改导航栏图像的答案,但这个问题有点不同。先感谢您。

5 个答案:

答案 0 :(得分:5)

要在iOS 5或更高版本中删除UINavigationBar背景,您应该这样做:

[navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

希望有所帮助

答案 1 :(得分:3)

您可以使用在运行时创建的空白图像设置背景图像。

UIGraphicsBeginImageContextWithOptions(CGSizeMake(36, 36), NO, 0.0);
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault];

在运行时创建空白图像: How to create a blank transparent png in Objective-C?

答案 2 :(得分:3)

我相信这是iOS5的第一个实际答案,主要问题是一旦完成背景图像的“删除”。好吧,只需保留现有图像,并在完成后将其放回原位。

@implementation MyViewController {
    UIImage *_defaultImage;
}

- (void)viewWillAppear:(BOOL)animated {   
    _defaultImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar.png"] forBarMetrics:UIBarMetricsDefault];
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.navigationController.navigationBar setBackgroundImage:_defaultImage forBarMetrics:UIBarMetricsDefault];
}

答案 3 :(得分:0)

看起来最简单的方法是:

1)将主页上导航栏的alpha设置为0.000001

2)将背景图片放在导航栏“后面”的UIImageView中(现在已经清除了)

3)使用viewWillAppear / viewWillDisappear在推送/弹出视图时将导航栏的不透明度设置为1或0.00001。

答案 4 :(得分:0)

这里没有什么对我有用。搜索了几个小时之后,唯一有效的方法就是遵循Apple提供的source code example

我放置了以下代码,它最终工作并从其他视图控制器中删除了导航栏图像!!

// Reset everything about navigation bar. (Other flows' background image used to show up on another view controller)
    self.navigationController!.navigationBar.setBackgroundImage(nil, for: .default)
    self.navigationController!.navigationBar.setBackgroundImage(nil, for: .compact)
    self.navigationController!.navigationBar.barTintColor = nil
    self.navigationController!.toolbar.barTintColor = nil
    self.navigationController!.toolbar.isTranslucent = true

希望这有助于某人。

干杯