在iphone的uinavigationbar上使用图像或色调?

时间:2009-05-23 13:33:21

标签: iphone xcode interface-builder

如何在导航栏上显示背景图像或为原生iphone应用程序中的导航栏添加色调?

7 个答案:

答案 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。

如果您尝试移动图层的框架,则所有按钮都将在其中移动。