59 votes

MFMailComposeViewController dans la barre d'état iOS 7 sont en noir

J'ai un bouton de commentaires dans mon application iOS 7 avec MFMailComposeViewController. Une fois que l'utilisateur a cliqué sur ce bouton, le composeur de courrier s'est ouvert, mais la barre d'état est devenue noire. Avez-vous une idée de ce que je peux faire?

J'ai ce problème uniquement avec iOS 7. Je personnalise mon application pour iOS 7.

     MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init];
            mailController.mailComposeDelegate = self;

            [mailController setSubject:@"Feedback"];
            // Fill out the email body tex
            NSString *emailBody = [NSString stringWithFormat:@"testest"],
                                   [UIDevice currentDevice].model,
                                   [UIDevice currentDevice].systemVersion];
            [mailController setMessageBody:emailBody isHTML:NO];
            [mailController setToRecipients:[NSArray arrayWithObjects:@"support@test.com",nil]];

            dispatch_async(dispatch_get_main_queue(), ^{
                [self presentModalViewController:mailController animated:YES];
}
 

143voto

Keller Points 6797

Définissez UIApplication statusBarStyle dans le bloc d'achèvement de presentViewController pour votre MFMailComposeViewController. c'est à dire

     MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
    [self.navigationController presentViewController:mailVC animated:YES completion:^{
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    }];
 

Vous devrez peut-être également ajouter et / ou définir "Afficher l'apparence de la barre d'état basée sur le contrôleur" sur NO dans votre fichier Info.plist.

58voto

Igor Palaguta Points 1335

Essayez d'ajouter une catégorie à MFMailComposeViewController

EDIT: cette solution fonctionne si "Voir l'apparence de la barre d'état basée sur le contrôleur" == OUI

 @implementation MFMailComposeViewController (IOS7_StatusBarStyle)

-(UIStatusBarStyle)preferredStatusBarStyle
{
   return UIStatusBarStyleLightContent;
}

-(UIViewController *)childViewControllerForStatusBarStyle
{
   return nil;
}

@end
 

7voto

user1769627 Points 41

Quel a été le truc pour moi:

  • Sous-classe MFMailComposeViewController
  • Ignorez les deux méthodes décrites à la réponse 6

    -(UIStatusBarStyle)preferredStatusBarStyle;

    -(UIViewController *)childViewControllerForStatusBarStyle;

  • Remplacez viewDidLoad comme suit:

    -(void)viewDidLoad {

5voto

Parfois, le style de la barre d'état ne sera pas mis à jour correctement. Tu devrais utiliser

  [self setNeedsStatusBarAppearanceUpdate];
 

Pour dire iOS pour actualiser le style de la barre d'état, manuellement. J'espère que quelqu'un gagnerait du temps à le savoir.

 [self presentViewController:picker animated:YES completion:^{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
     [self setNeedsStatusBarAppearanceUpdate];
}];
 

0voto

Wain Points 65967

iOS 7 introduit une méthode prefersStatusBarHidden , mais ce ne sera pas si facile à utiliser dans ce cas. Vous pouvez préférer utiliser le statusBarHidden propriété de UIApplication tandis que le modal est présenté.

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