66 votes

Puis-je définir l'image comme titre pour UINavigationBar?

Est-il possible de définir une image comme titre de la barre de navigation?

Je pense que l'application NYTimes utilisait une barre de navigation et que le titre ressemblait à un fichier image (la raison pour laquelle il semble que NavigationBar soit parce qu'ils utilisent le bouton droit pour rechercher)

À votre santé.

128voto

Vous pouvez utiliser un ImageView pour la propriété UINavigationItem.titleView, par exemple:

 self.navigationItem.titleView = myImageView;
 

16voto

Clifton Burt Points 333

Je trouve qu'un .png transparent à environ 35px de hauteur a bien fonctionné.

 - (void)awakeFromNib {

//put logo image in the navigationBar

UIImageView* img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
self.navigationItem.titleView = img;
[img release];

}
 

8voto

adam Points 10572

J'ai créé une catégorie personnalisée pour UINavigationBar comme suit

UINavigationBar + CustomImage.h

 #import <UIKit/UIKit.h>

@interface UINavigationBar (CustomImage)
    - (void) setBackgroundImage:(UIImage*)image;
    - (void) clearBackgroundImage;
    - (void) removeIfImage:(id)sender;
@end
 

UINavigationBar + CustomImage.m

 #import "UINavigationBar+CustomImage.h"

@implementation UINavigationBar (CustomImage)

- (void) setBackgroundImage:(UIImage*)image {
    if (image == NULL) return;
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(110,5,100,30);
    [self addSubview:imageView];
    [imageView release];
}

- (void) clearBackgroundImage {
    NSArray *subviews = [self subviews];
    for (int i=0; i<[subviews count]; i++) {
        if ([[subviews objectAtIndex:i]  isMemberOfClass:[UIImageView class]]) {
        [[subviews objectAtIndex:i] removeFromSuperview];
    }
   }    
}

@end
 

Je l'invoque depuis mon UINavigationController

 [[navController navigationBar] performSelectorInBackground:@selector(setBackgroundImage:) withObject:image];
 

5voto

ck. Points 212

J'ai modifié le UINavigationBar + CustomImage.m pour que le titre reste visible pour l'utilisateur. Il suffit d'utiliser insertSubview: atIndex: au lieu de addSubview:

UINavigationBar + CustomImage.m

 #import "UINavigationBar+CustomImage.h"

@implementation UINavigationBar (CustomImage)

- (void) setBackgroundImage:(UIImage*)image {
    if (image == NULL) return;
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(0, 0, 320, 44);
    [self insertSubview:imageView atIndex:0];
    [imageView release];
}

- (void) clearBackgroundImage {
    NSArray *subviews = [self subviews];
    for (int i=0; i<[subviews count]; i++) {
        if ([[subviews objectAtIndex:i]  isMemberOfClass:[UIImageView class]]) {
        [[subviews objectAtIndex:i] removeFromSuperview];
    }
   }    
}

@end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X