更改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;