2013-01-02 3 views
6

Ci-dessous le code fonctionne parfaitement bien iOS 5, mais pas sur iOS 6 ou supérieur. Ce que je veux que pour la feuille compositeur Email l'image navigationBar sera différente des autres classes UINavigationBar. Je ne peux pas comprendre que le pointeur de débogage répond la méthode d'apparence mais sur l'appareil il montre l'image de navigationBar comme "bgNavigationBar.png"; attendu est "bgNavigationBar_2.png".UIAppearence Support pour IOS 6 - résultats inattendus

S'il vous plaît me guider .......

if ([[UINavigationBar class]respondsToSelector:@selector(appearance)]) { 
    UIImage *logoImage44 = [[UIImage imageNamed:@"bgNavigationBar.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UINavigationBar appearance] setBackgroundImage:logoImage44 forBarMetrics:UIBarMetricsDefault]; 

    UIImage *ImagePlain = [[UIImage imageNamed:@"bgNavigationBar_2.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:ImagePlain forBarMetrics:UIBarMetricsDefault]; 
} 
+0

iOS 6 bug. Open Radar - http://www.openradar.me/radar?id=2984402 – Daniel

Répondre

7

Cette chose ne fonctionne pas dans iOS6.

[[UINavigationBar appearanceWhenContainedIn:[MFMessageComposeViewController class], nil] setBackgroundImage:[UIImage imageNamed:@"bgNavigationBar_2.png"] forBarMetrics:UIBarMetricsDefault]; 

Vous avez juste besoin de définir cette propriété dans votre classe de gestionnaire de messagerie.

if (![[UINavigationBar class]respondsToSelector:@selector(appearance)]) 
{ 
    UIView *backgroundView = [[[UIView alloc] initWithFrame:CGRectMake(0,0,320,44)]autorelease]; 

    [backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"bgNavigationBar_2.png"]]]; 
    controller.topViewController.navigationItem.titleView = backgroundView ; 
} 
else 
{ 
    UIImage *gradientImagePlain = [[UIImage imageNamed:@"bgNavigationBar_2.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UINavigationBar appearance] setBackgroundImage:gradientImagePlain forBarMetrics:UIBarMetricsDefault]; 
} 

puis de réinitialiser une autre image pour l'image de fond de tous les autres contrôleurs de navigation.

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result 
{ 
    [self.parentController dismissModalViewControllerAnimated:YES]; 
    UIImage *gradientImagePlain = [[UIImage imageNamed:@"bgNavigationBar.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UINavigationBar appearance] setBackgroundImage:gradientImagePlain forBarMetrics:UIBarMetricsDefault]; 
} 

Espérons que cela fonctionnera pour vous.

Questions connexes