Objective-C:导航栏中的背景图像和标题

时间:2010-11-26 09:55:10

标签: objective-c uinavigationbar background-image title navigationbar

需要背景图片和导航栏中的标题。对于图像,我写了一个类别:

@implementation UINavigationBar(MyNavigationBar)
- (void)setBackgroundImage {
    UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"navBarBackgrd.png"]];
    [self addSubview: aTabBarBackground];
    [self sendSubviewToBack: aTabBarBackground];
    [aTabBarBackground release];
}
@end

我在AppDelegate中调用此类别,并在整个应用程序中包含背景图像:

[navigationController.navigationBar setBackgroundImage]; 

每个ViewController都有一个标题:

[self setTitle:@"MyTitle"];

但在设置背景图片后,标题出现问题。

在第一个视图中每个作品,我看到背景图片和标题:-) 但在下一个视图中,标题消失了。只有背景图像可见。也许标题是在图像下?

从技术上讲,可以同时显示两者。有了这个技巧,它就可以了:

  1. 在打开下一个ViewController之前隐藏导航栏:

    [self.navigationController setNavigationBarHidden:YES];

  2. 在下一个ViewController中显示导航栏:

    [self.navigationController setNavigationBarHidden:NO];

  3. 现在,图像和标题是可见的,但这种解决方案并不是最好的; - )

2 个答案:

答案 0 :(得分:2)

我明白了!

@implementation UINavigationBar(MyNavigationBar)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"navBarBackgrd.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

请参阅Background image for navigation view

答案 1 :(得分:2)

在IOS5之后你应该这样做,例如在AppDelegate


 UIImage *img = [[UIImage imageNamed:@"image.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:0 green: 0 blue:0  alpha:1]];