[英]How to add background image on iphone Navigation bar?
我想在导航栏中添加图像背景。
这样对吗?
//set custom background image
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NavigationBackground.png"]];
[self.navigationBar insertSubview:backgroundView atIndex:0];
[backgroundView release];
这是来自@luvieere 链接的代码。 将此代码粘贴到@implementation rootviewController上方的@implementation rootviewController
@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
从iOS 5开始,有一种正式的方法可以执行此操作。 (请参阅iOS开发者库 )
// someplace where you create the UINavigationController
if ([navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
UIImage *image = [UIImage imageNamed:@"NavigationBar.png"];
[navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}
但是,仍然保留旧代码以实现向后兼容性,除非您真的想放弃iOS 4及以下版本。
最简单的方法是设置UINavigationBar
图层内容。
NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"mybgimage" ofType:@"png"];
[nBar.layer setContents: (id)[UIImage imageWithContentsOfFile: barBgPath].CGImage];
不利的一面是按钮不是从正确的色调生成的,但是您可以将导航栏颜色设置为最接近您的bg图像的颜色,并且应该注意色调。
我会在appdelegate中执行以下操作
+ (void)Generalstyle {
//navigationbar
UINavigationBar *navigationBar = [UINavigationBar appearance];
[navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation.png"] forBarMetrics:UIBarMetricsDefault];
}
而在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[self class] Generalstyle];
}
.h文件:
+ (void) Generalstyle;
在ios5中,我在AppDelegate.m
设置了导航栏背景图片(用于所有导航栏图片):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[application setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
UIImage *navBarBackgroundImage = [UIImage imageNamed:@"nav_bg"];
[[UINavigationBar appearance] setBackgroundImage:navBarBackgroundImage forBarMetrics:UIBarMetricsDefault];
return YES;
}
当iPhone 5出现时,我们必须同时设置两种设备类型。 所以用这个
if([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
//iOS 5 new UINavigationBar custom background
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbg_ForiPhone5_Imagename.png"] forBarMetrics: UIBarMetricsDefault];
} else {
[self.navigationController.navigationBar insertSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbg_ForOtherIphone_Imagename.png"]] atIndex:0];
}
有关更多信息,请转到此链接
这个可以在iOS 6和7中正常工作
UINavigationBar *navBar = [[self navigationController] navigationBar];
UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"];
[navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
迅捷版 :
let navBar = UINavigationBar.appearance();
navBar.setBackgroundImage(UIImage(named: "yourImageName"), forBarMetrics: .Default)
更新了Swift 3.2 :
let navBar = UINavigationBar.appearance();
navBar.setBackgroundImage(UIImage(named: "yourImageName"), for: .default)
您还可以添加一个扩展UINavigationBar类的类别,并覆盖该类别中的drawRect:方法。
我所做的只是用所需的图像创建了一个UIImage,并像这样添加到导航栏中。
UIImage *image = [UIImage imageNamed:@"yourImage.png"];
[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
添加导航栏背景图像时,应非常注意其尺寸。 请确保您具有用于不同屏幕尺寸的以下尺寸。
1) background.png => 320x44
2) background@2x.png => 640x88 //用于iPhone5和视网膜设备
3) background@3x.png => 1334x183 //用于iPhone6
使用以下代码添加背景图像,并避免在导航栏的背景图像中进行任何平铺。
[self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault];
在您的AppDelegate类中尝试此代码以在导航栏上显示图像。 它将帮助您很多。
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"headerImg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.