6

如何在导航栏上显示背景图像或在本机 iphone 应用程序中为导航栏提供色调?

4

7 回答 7

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/

于 2011-11-03T22:50:57.510 回答
8

This's how I did on iOS4:

#import <QuartzCore/QuartzCore.h> // For .layer 

self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"navigationBarBackgroundImage"].CGImage;
self.navigationController.navigationBar.tintColor = [UIColor orangeColor];

No need to switch subviews between z-orders (-exchangeSubviewAtIndex:withSubviewAtIndex:), both background image and tintColor set in one line of code, and works with @2x image too.

于 2010-10-26T18:32:12.203 回答
6

一周前正在寻找这个。在这里的讨论中找到了这个。苹果。com/thread.jspa?threadID=1649012&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];

任何修改后吧。

于 2009-05-23T19:56:49.240 回答
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
于 2011-03-23T22:03:09.193 回答
2

对于 iOS5 和 iOS6,我使用了这个解决方案,并且效果很好,制作了一个通用 UINavigationBar 背景图像。

iPhone 视网膜纵向 640px x 88px / iPhone 非视网膜纵向 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/

于 2012-11-19T13:51:48.583 回答
1

背景图像将需要更多工作(您可能想尝试设置与栏本身大小相同的titleView;我自己没有尝试过)或在现有子视图后面添加一个视图。着色很简单:navBar.tintColor = [UIColor orangeColor];

于 2009-05-23T15:18:09.667 回答
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。

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

于 2011-06-10T10:18:09.963 回答