如何在iphone导航栏上添加背景图片?

Mom*_*omi 32 iphone cocoa-touch background uinavigationbar ios

我想在导航栏中添加图像背景.

这样对吗?

//set custom background image
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NavigationBackground.png"]];
[self.navigationBar insertSubview:backgroundView atIndex:0];
[backgroundView release];
Run Code Online (Sandbox Code Playgroud)

iwa*_*wat 98

这是来自@luvieere 链接的代码.将此代码粘贴到上面的根视图控制器中 @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
Run Code Online (Sandbox Code Playgroud)

从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];
}
Run Code Online (Sandbox Code Playgroud)

但是,除非你真的想放弃iOS 4及更低版本,否则请保留旧代码以实现向后兼容.

  • 别忘了为@luvieere投票,值得赞扬. (2认同)

luv*_*ere 32

你的代码本身不会这样做,你必须写一个类别才能使它工作.关于你应该采用的方法有两种方法:第一种方法是将图像作为你的子视图,UINavigationBar并在你UIViewController的每个viewDidAppear方法中重新将它带到前面.据报道,这涉及到涉及权利的一些问题UIBarButtonItem.另一种方法涉及覆盖

- (void)drawRect:(CGRect)rect

并在那里绘制图像.本博客讨论中广泛涵盖了两个方面.


dru*_*ass 9

最简单的方法是设置UINavigationBar图层内容.

NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"mybgimage" ofType:@"png"];
[nBar.layer setContents: (id)[UIImage imageWithContentsOfFile: barBgPath].CGImage];
Run Code Online (Sandbox Code Playgroud)

缺点是按键也不会产生过正确的色彩,但你可以设置导航栏的颜色最接近什么是你的背景图片和色调应采取照顾.


Bla*_*zer 8

我会在appdelegate中这样做

+ (void)Generalstyle {
    //navigationbar
    UINavigationBar *navigationBar = [UINavigationBar appearance];
    [navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation.png"] forBarMetrics:UIBarMetricsDefault];

}
Run Code Online (Sandbox Code Playgroud)

并在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    [[self class] Generalstyle];

}
Run Code Online (Sandbox Code Playgroud)

.h文件:

+ (void) Generalstyle;
Run Code Online (Sandbox Code Playgroud)


jia*_*npx 8

在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;
}
Run Code Online (Sandbox Code Playgroud)