6

次のコードをアプリケーションに適用して、ナビゲーション バーの画像を変更しました。

- (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];
}

次の画像を参照してください。私が直面している問題を見ることができます。

代替テキスト


代替テキスト

私のアプリケーションの各View Controllerには、ナビゲーションバーの背景を設定する上記のメソッドがあります。

ただし、新しいView Controllerをアプリケーションにプッシュすると。戻るボタンが表示されます。

戻るボタンを表示する必要があります。ただし、画像は戻るボタンの後ろにある必要があります。

今、私はここで少し混乱しています。

これについて私を助けてもらえますか?

あなたの知識を私と共有してくれてありがとう。

どうもありがとう。

4

2 に答える 2

6

面倒な夜を過ごした後、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

于 2010-01-10T22:00:19.500 に答える
5

簡単に言えば、UINavigationBar の構造の変更は Apple によってサポートされていないということです。彼らは、あなたがやろうとしていることをあなたがすることを本当に望んでいません。それが、あなたが見ている問題の原因です。

ある時点で正式に追加されるのに十分な注目を集めることができるように、この機能を要求するレーダーを提出してください.

そうは言っても、問題を解決するには、 -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);
}
于 2009-09-05T03:39:22.630 に答える