如何在导航栏上显示背景图像或为原生iphone应用程序中的导航栏添加色调?
答案 0 :(得分:10)
对于iOS5,请使用以下代码行:
UINavigationBar *navBar = [[self navigationController] navigationBar];
UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"];
[navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
为了向后兼容,请检查导航栏是否响应setBackgroundImage:forBarMetrics:
更多信息: http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/
答案 1 :(得分:8)
这就是我在iOS4上的表现:
#import <QuartzCore/QuartzCore.h> // For .layer
self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"navigationBarBackgroundImage"].CGImage;
self.navigationController.navigationBar.tintColor = [UIColor orangeColor];
无需在z-orders(-exchangeSubviewAtIndex:withSubviewAtIndex :)之间切换子视图,在一行代码中设置背景图像和tintColor,并且也可以使用@ 2x图像。
答案 2 :(得分:6)
一周前正在寻找这个。在此讨论发现了这一点。苹果。 com / thread.jspa?threadID = 1649012&amp; tstart = 0(抱歉不允许我发布真实链接)。
-(void)setBackgroundImage:(UIImage*)image withTag:(NSInteger)bgTag{
if(image == NULL){ //might be called with NULL argument
return;
}
UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:image];
aTabBarBackground.frame = CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
aTabBarBackground.tag = bgTag;
[self addSubview:aTabBarBackground];
[self sendSubviewToBack:aTabBarBackground];
[aTabBarBackground release];
}
/* input: The tag you chose to identify the view */
-(void)resetBackground:(NSInteger)bgTag {
[self sendSubviewToBack:[self viewWithTag:bgTag]];
}
我把它作为UINavigationBar的一个类别。要在UINavigationBarController中为UINavigationBar设置背景图像,我这样做了:
[navigationControllerForChannels.navigationBar setBackgroundImage:[UIImage imageNamed:@"top_bar.png"] withTag:48151623];
我在更新标签栏时遇到了一些问题,因此您需要致电
[self.navigationController.navigationBar resetBackground:48151623];
对条形图进行任何修改后。
答案 3 :(得分:3)
您可以覆盖UINavigationBar drawRect。代码可以放在appDelegate.m中 我测试了它,它正在使用3x和4x iOS。
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIColor *color = [UIColor blackColor]; //tint color
UIImage *img = [UIImage imageNamed: @"navBarBg.png"]; // your image
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
self.tintColor = color;
}@end
答案 4 :(得分:2)
对于iOS5和iOS6,我使用过这个解决方案,它完美无缺,制作了一个通用的UINavigationBar背景图片。
iPhone Retina Portrait 640px x 88px / iPhone非Retina Portrait 320px x 44px
在AppDelegate.m内部
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
放置此代码
// Set the status bar to black color.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
// Change @"menubar.png" to the file name of your image.
UIImage *navBar = [UIImage imageNamed:@"menubar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBar forBarMetrics:UIBarMetricsDefault];
不要忘记更改图片名称(menubar.png)
请查看此链接以获取完整答案http://www.lwxted.com/blog/2012/add-custom-background-image-uinavigationbar-ios-5/
答案 5 :(得分:1)
背景图片需要更多的工作(你可能想尝试设置一个与栏本身大小相同的titleView;我自己没有尝试过这个)或者在现有子视图后面添加一个视图。色调很容易:navBar.tintColor = [UIColor orangeColor];
答案 6 :(得分:0)
如果您使用CGImage解决方案,则可能是图像尺寸有问题:
CGRect layer=self.navigationController.navigationBar.frame;
layer.size.height=57.0;
layer.origin.y=0;
self.navigationController.navigationBar.frame=layer;
CGImageRef imageRef = [UIImage imageNamed:@"myImg.png"].CGImage;
self.navigationController.navigationBar.layer.contents = (id)imageRef;
在我看来,图像是向下拉伸的,因为该图层的高度似乎为44.0像素,但UINavigationBar的背景图像应该至少为57.0。
如果您尝试移动图层的框架,则所有按钮都将在其中移动。