web-dev-qa-db-fra.com

Image d'arrière-plan personnalisée sur UIToolbar dans le SDK IOS5

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?

27
StackThis

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

49
Simone

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.

35
loretoparisi

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

    }
10
RyeMAC3

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

3
Vladimir

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
0
stuckj