更改UINavigationBar背景图像

我一直在试图改变我的应用程序的UINavigationBar的背景图像。 我尝试了几种方法。 首先我添加到我的AppDelegate类下面的代码:

@implementation UINavigationBar (CustomImage) - (void)drawRect:(CGRect)rect { UIImage *image = [UIImage imageNamed: @"navigationbar.png"]; [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; } @end 

但它不起作用。 我的下一个尝试是编写一个覆盖drawRect方法的CustomizedNavigationBar类。 它看起来像这样:

CustomizedNavigationBar.h

 #import <UIKit/UIKit.h> @interface CustomizedNavigationBar : UINavigationBar @end 

CustomizedNavigationBar.m

 #import "CustomizedNavigationBar.h" @implementation CustomizedNavigationBar - (void) drawRect:(CGRect)rect { UIImage *image = [UIImage imageNamed: @"navigationbar.png"]; [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; NSLog(@"I got called!!!!!"); } @end 

在定义NavigationBar的.xib文件中,我将类更改为新的CustomizedNavigationBar。 但仍然没有工作..

作为另一个testing,我下载了一个应该改变背景图片的示例项目。 但即使是这样的示例代码,它不工作。

我究竟做错了什么? 我正在使用IOS 5.任何build议或其他方式,我可以定义一个背景图像?

感谢您的回答!

从iOS 5开始,您应该使用setBackgroundImage:forBarMetrics:方法:

 [myNavbar setBackgroundImage:[UIImage imageNamed: @"UINavigationBarBackground.png"] forBarMetrics:UIBarMetricsDefault]; 

而在Swift中

 navigationBar.setBackgroundImage(UIImage(named: "UINavigationBarBackground.png"), forBarMetrics: .Default) 

考虑到所有的iOS版本,这似乎是完成自定义背景图像和UINavigationBar的自定义大小:

 @interface CustomNavigationBar : UINavigationBar @end @implementation CustomNavigationBar -(void) drawRect:(CGRect)rect { UIImage *image = [UIImage imageNamed: @"navigationBar"]; [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; //for iOS5 [self setBackgroundImage:[UIImage imageNamed: @"navigationBar"] forBarMetrics:UIBarMetricsDefault]; } //for custom size of the UINavigationBar - (CGSize)sizeThatFits:(CGSize)size { CGSize newSize = CGSizeMake(320,31); return newSize; } @end 

我使用这样的代码在一个普通的地方像一个实用程序文件。

希望这可以帮助。

试试这个代码..在你的implmentation(.m)文件中。

 #import "RootViewController.h" @implementation UINavigationBar (CustomImage) - (void)drawRect:(CGRect)rect { UIImage *image = [UIImage imageNamed: @"navheader.png"]; [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; } @end 

@implementation RootViewController

 - (void)viewDidLoad { [super viewDidLoad]; // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem; self.title=@"You are Done."; } 

这对我来说工作非常好。

以上代码仅适用于IOS 4.如果使用IOS 5,则使用…..

  [myNavbar setBackgroundImage:[UIImage imageNamed: @"UINavigationBarBackground.png"] forBarMetrics:UIBarMetricsDefault]; 

你可以添加UIImageView导航栏如下UINavigationBar navBar = [[UINavigationBar alloc] init]; [navBar addSubview:imageview]; [navBar发布];

您可以检查post: iPhone – NavigationBar自定义背景

您也可以尝试导航栏背景。

 UINavigationBar *navigationBar = self.navigationController.navigationBar; UIImage *image = [UIImage imageNamed: @"NavBar-Wood.png"]; [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault]; self.navigationController.navigationBar.tintColor = [UIColor brownColor]; 

谢谢。

在导航栏中设置图像的另一种方法是,

 UIImage* logo = [ UIImage imageNamed:@"Logo.png" ]; UIImageView* logoView = [[[UIImageView alloc] initWithImage:logo] autorelease]; self.navigationItem.titleView = logoView; 

这不会改变整个导航栏的背景。 但是在导航栏中添加了一个背景图片,这个图片有时候更有意思(我在找什么)。

那么对于iOS 4有一个简单的解决scheme,如:

 nvc.navigationBar.layer.contents = (id)img.CGImage;