Question

J'ai appliqué le code suivant à ma demande de changer l'image de la barre de navigation.

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

Voir les images ci-dessous. Vous pouvez voir le problème que je suis confronté.

text alt


text alt

Chaque contrôleur vue de mon application a des méthodes ci-dessus pour définir l'arrière-plan de la barre de navigation.

Comment jamais, quand je pousse un nouveau contrôleur de vue de mon application. Retour bouton sera apparaît.

Je dois revenir bouton à apparaître. Mais l'image doit être derrière bouton de retour.

Maintenant, je suis un peu confus ici.

Pouvez-vous me aider à ce sujet?

Merci d'avance pour partager vos connaissances avec moi.

Merci beaucoup.

Était-ce utile?

La solution

Après une nuit ennuyeux, je trouve un peu à ce tweak, si vous utilisez drawLayer. Avec drawRect, lorsque vous jouez une vidéo ou d'une vidéo sur youtube, la barre de navigation est remplacée par l'image. Et je l'ai lu quelques messages que cela a causé leur application à rejeter.

@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

Si cet article est exact, tout devrait bien se passer avec cette approche: http://developer.apple.com/iphone/library/qa/ qa2009 / qa1637.html

Autres conseils

La réponse courte est que la modification de la structure du UINavigationBar est pas pris en charge par Apple. Ils ne veulent vraiment pas que vous ne soyez en train de faire ce que vous essayez de faire. C'est ce qui cause le problème que vous rencontrez.

S'il vous plaît déposer un radar demandant cette fonction afin qu'il puisse obtenir suffisamment d'attention à être officiellement ajoutée à un moment donné.

Cela dit, pour résoudre le problème, vous pouvez ajouter une catégorie à UINavigationBar avec un -drawRect: méthode et dessiner l'image d'arrière-plan dans cette méthode. Quelque chose comme cela fonctionnera:

- (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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top