Hier, j'ai téléchargé le SDK IOS5 et ce code que j'utilise pour définir l'arrière-plan de mon UIToolbar sur une image personnalisée a cessé de fonctionner. Si je fixe la cible à IOS4.3 et en dessous, cela fonctionne toujours.
[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];
Quelqu'un a déjà rencontré cela sur IOS 5?
Vous pouvez utiliser: [[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];
(nouveau dans iOS 5)
Supposons que vous ayez lié le SDK bêta iOS5, vous pourriez faire quelque chose comme ça
if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
//iOS 5 new UINavigationBar custom background
[navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
}
Pour réaliser cela, jetez un œil ici Différences de l'API iOS 4.3 à iOS 5. et recherchez "UINavigationBar.h"
ou regardez attentivement la nouvelle signature de la méthode ici setBackgroundImage: forBarMetrics:
Voici également le type d'énumération IBarMetrics
J'espère que cela t'aides.
Cela a fonctionné sur ma barre d'outils:
//toolBar background image set based on iOS version
[[UIDevice currentDevice] systemVersion];
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) {
//iOS 5
UIImage *toolBarIMG = [UIImage imageNamed: @"toolBar_brown.png"];
if ([toolBar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) {
[toolBar setBackgroundImage:toolBarIMG forToolbarPosition:0 barMetrics:0];
}
} else {
//iOS 4
[toolBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolBar_brown.png"]] autorelease] atIndex:0];
}
Cette méthode n'est pas documentée et repose sur une structure de sous-vues spécifiques de UIToolbar qui peut être modifiée d'une version à l'autre. C'est exactement ce qui s'est probablement passé avec la version iOS5
P.S. Si vous cochez la mise à jour classe UIToolBar référence, vous trouverez une autre façon de personnaliser UIToolBar
Cela va dans le même sens que la réponse de Simone, mais fonctionne pour iOS 5 et iOS <5. C'est ce que j'utilise dans l'application. Vous devez appeler [UINavigationBar setupIos5PlusNavBarImage]
quelque part dans l'initialisation de votre application (applicationDidFinishLaunching: est un bon candidat). Sur iOS 5+, setupIos5PlusNavBarImage utilisera le nouveau protocole UIAppearance pour définir l'arrière-plan et la substitution drawRect sera ignorée. Sur iOS <5, setupIos5PlusNavBarImage sera essentiellement un no-op et le drawRect gérera le dessin de l'image.
Interface:
@interface UINavigationBar (CustomNavigationBar)
+ (void) setupIos5PlusNavBarImage;
- (void) drawRect: (CGRect) rect;
@end
La mise en oeuvre:
@implementation UINavigationBar (CustomNavigationBar)
+ (void) setupIos5PlusNavBarImage
{
if ([UINavigationBar respondsToSelector: @selector(appearance)])
{
[[UINavigationBar appearance] setBackgroundImage: [UIImage imageNamed: @"menuBar.png"] forBarMetrics: UIBarMetricsDefault];
}
}
- (void) drawRect: (CGRect) rect
{
UIImage* img = [UIImage imageNamed: @"menuBar.png"];
[img drawInRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end