27 votes

Image de fond personnalisée sur UIToolbar dans IOS5 SDK

J'ai téléchargé le SDK IOS5 hier, et ce code que j'utilise pour définir l'arrière-plan de ma barre d'outils UIToolbar sur une image personnalisée a cessé de fonctionner. Si je règle la cible sur IOS4.3 et inférieur, cela fonctionne toujours.

[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];

Quelqu'un a déjà rencontré ce problème sur IOS 5 ?

50voto

Simone Points 514

Vous pouvez utiliser : [[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault]; (nouveau dans iOS 5)

35voto

loretoparisi Points 1206

Supposons que vous ayez lié le SDK iOS5 beta, vous pourriez faire quelque chose comme ceci

if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
        //iOS 5 new UINavigationBar custom background
        [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
} 

Pour s'en rendre compte, jetez un coup d'oeil ici Différences d'API entre iOS 4.3 et iOS 5.0 et recherchez "UINavigationBar.h".

ou regardez de près la nouvelle signature de la méthode ici setBackgroundImage:pourBarMetrics :

Voici également le UIBarMetrics enum type

J'espère que cela vous aidera.

10voto

RyeMAC3 Points 794

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

    }

3voto

Vladimir Points 110327

Cette méthode n'est pas documentée et repose sur la structure spécifique des sous-vues de UIToolbar qui peut être modifiée d'une version à l'autre. C'est donc exactement ce qui s'est passé avec la version iOS5.

P.S. Si vous vérifiez les mises à jour Classe UIToolBar référence vous trouverez une autre façon de personnaliser UIToolBar

0voto

stuckj Points 475

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 surcharge drawRect sera ignorée. Sur iOS < 5, setupIos5PlusNavBarImage sera essentiellement un no-op et le drawRect se chargera de dessiner l'image.

Interface :

@interface UINavigationBar (CustomNavigationBar)

+ (void) setupIos5PlusNavBarImage;

- (void) drawRect: (CGRect) rect;

@end

Mise en œuvre :

@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

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