iPhone中的UINavigationbar背景
Posted
技术标签:
【中文标题】iPhone中的UINavigationbar背景【英文标题】:UINavigation bar background in iPhone 【发布时间】:2009-09-04 19:33:26 【问题描述】:我已将以下代码应用于我的应用程序以更改导航栏图像。
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
[self.navigationController.navigationBar setTintColor:[UIColor blackColor]];
[self setNavigationBarTitle];
-(void)setNavigationBarTitle
UIView *aViewForTitle=[[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 45)] autorelease];
UIImageView *aImg=[[UIImageView alloc] initWithFrame:CGRectMake(-8, 0, 320, 45)];
aImg.image=[UIImage imageNamed:@"MyTabBG.png"];
[aViewForTitle addSubview:aImg]; [aImg release];
UILabel *lbl=[[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 305, 45)] autorelease];
lbl.backgroundColor=[UIColor clearColor]; lbl.font=[UIFont fontWithName:@"Trebuchet MS" size:22];
lbl.shadowColor=[UIColor blackColor]; [lbl setShadowOffset:CGSizeMake(1,1)];
lbl.textAlignment=UITextAlignmentCenter; lbl.textColor=[UIColor whiteColor]; lbl.text=@"Mobile Tennis Coach Overview";
[aViewForTitle addSubview:lbl];
[self.navigationItem.titleView addSubview:aViewForTitle];
请看以下图片。你可以看到我面临的问题。
我的应用程序的每个视图控制器都有上述方法来设置导航栏背景。
然而,当我将一个新的视图控制器推送到我的应用程序时。将出现返回按钮。
我需要后退按钮才能出现。但是图片应该在后退按钮后面。
现在我有点困惑了。
你能帮我解决这个问题吗?
提前感谢您与我分享您的知识。
非常感谢。
【问题讨论】:
嗨 Sagar,普通按钮(即不是后退按钮)如何呈现?它工作正常还是有同样的问题? 在我以前的导航控制器中-视图将消失方法-我已将标题设置为后退-self.navigationItem.title=@"back"。 【参考方案1】:经过一个烦人的夜晚后,如果您使用 drawLayer,我发现对此进行了微调。使用 drawRect,当您播放视频或 youtube 视频时,导航栏将替换为图像。我阅读了一些帖子,这导致他们的应用被拒绝。
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
if([self isMemberOfClass:[UINavigationBar class]])
UIImage *image = [UIImage imageNamed:@"navBarBackground.png"];
CGContextClip(ctx);
CGContextTranslateCTM(ctx, 0, image.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextDrawImage(ctx,
CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
else
[super drawLayer:layer inContext:ctx];
@end
如果这篇文章是准确的,那么这种方法应该没问题: http://developer.apple.com/iphone/library/qa/qa2009/qa1637.html
【讨论】:
【参考方案2】:简短的回答是,Apple 不支持修改 UINavigationBar 的结构。他们真的不希望你做你想做的事。这就是导致您看到的问题的原因。
请提交一份雷达请求此功能,以便得到足够的关注,以便在某个时候正式添加。
话虽如此,要解决此问题,您可以使用 -drawRect: 方法向 UINavigationBar 添加类别并在该方法中绘制背景图像。这样的事情会起作用:
- (void)drawRect:(CGRect)rect
static UIImage *image;
if (!image)
image = [UIImage imageNamed: @"HeaderBackground.png"];
if (!image) image = [UIImage imageNamed:@"DefaultHeader.png"];
if (!image) return;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
【讨论】:
以上是关于iPhone中的UINavigationbar背景的主要内容,如果未能解决你的问题,请参考以下文章
uinavigationbar 中的半透明在 iPhone 5 中有效,但在 4s 中无效
iPhone:带按钮的 UINavigationBar - 调整高度