将背景图像添加到UINavigationBar涵盖了标题

时间:2011-11-07 20:28:01

标签: ios background uinavigationbar

我已使用以下代码成功将背景图像添加到我的UINavigationBar中:

    UIImageView *barView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"subHeader_lg.png"]];
    [calculatorBar addSubview:barView];

    [barView release];

但是,使用此方法,图像将覆盖视图的标题。

enter image description here

如果我进一步导航到应用程序,然后返回,则标题会出现在背景图像的顶部,如下所示:

enter image description here

任何想法如何让我的标题从一开始就显示在顶部?

我尝试将barView推到后面,但这会让它隐藏在其他所有内容之后。

编辑:

似乎自定义绘制函数是已接受的答案,但我无法调用绘制函数。我在appdelegate.m文件的底部有这段代码

@implementation UINavigationBar (UINavigationBarCustomDraw)

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

@end

2 个答案:

答案 0 :(得分:1)

当您调用“addSubview”时,它会将其添加到已添加的任何视图上方,从而覆盖标题。

你想要的是

[calculatorBar insertSubview:barView atIndex:0];

但是,这不会使其“坚持”后续推送,因此请使用http://www.developers-life.com/custom-uinavigationbar-with-image-and-back-button.html中描述的方法获得更好的解决方案。

同样在iOS 5中,Apple添加了内置方式来自定义导航栏,请参阅http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIAppearance_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40010906

答案 1 :(得分:1)

要在导航栏上设置背景图像,请使用以下内容。

在iOS 5.x上,使用 [calculatorBar setBackgroundImage:barView.image forBarMetrics:0];

在iOS 4.x上使用 calculatorBar.layer.contents =(id)barView.image.CGImage;