MFMailComposeViewController dans iOS 7 la barre d'état sont en noir
j'ai un bouton de commentaires dans mon ios 7 application avec MFMailComposeViewController. Après que l'utilisateur clique sur ce bouton, le mailcomposer ouvert, mais la barre de statut a changé au noir. Avoir quelqu'un à une idée de ce que je peux faire?
j'ai ce problème uniquement avec ios7. je la personnalisation de mon application pour ios7.
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:@"[email protected]",nil]];
dispatch_async(dispatch_get_main_queue(), ^{
[self presentModalViewController:mailController animated:YES];
}
Vous devez vous connecter pour publier un commentaire.
Définir la UIApplication statusBarStyle à la fin du bloc de presentViewController pour votre MFMailComposeViewController. c'est à dire
Vous pouvez aussi avoir besoin d'ajouter et/ou définir des "Afficher le contrôleur d'état basé sur l'apparence de la barre" à PAS dans votre Info.fichier plist.
[self presentViewController:mailVC...
au lieu de[self.navigationController...
presentViewController(picker, animated: true, completion: {UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: false)})
où sélecteur estvar picker = MFMailComposeViewController()
Essayez d'ajouter une catégorie à MFMailComposeViewController
EDIT: cette solution fonctionne si "- Vue-contrôleur d'état basé sur l'apparence de la barre" == OUI
childViewControllerForStatusBarStyle
fait son travail très bien! Sans elle, mais rien ne se passe.preferredStatusBarStyle
de la lumière (le contenu) etchildViewControllerForStatusBarStyle
(néant) et il fonctionne très bien. Vous devez ajuster info.plist comme décrit ci-dessus.Swift solution.
Ensemble
View controller-based status bar appearance
àYES
Ce qui a fait le tour pour moi a été:
Remplacer les deux méthodes décrites dans la réponse 6
-(UIStatusBarStyle)preferredStatusBarStyle;
-(UIViewController *)childViewControllerForStatusBarStyle;
Remplacer viewDidLoad comme suit:
-(void)viewDidLoad {
[super viewDidLoad];
[self preferredStatusBarStyle];
[self setNeedsStatusBarAppearanceUpdate];
}
Solution pour Swift3
Ajouter à votre ViewController:
Ensemble
View controller-based status bar appearance
>> OUI, comme ci-dessous:Grâce à @SoftDesigner
Un autre nettoyant solution qui ne peut pas changer les autres paramètres de votre application. Lors de la présentation du Mail VC modifier la barre d'état dans la réalisation de bloc:
UIApplication.shared.statusBarStyle
est obsolète dans iOS 9, l'extension a fait l'affaire!À certains moments, il ne sera pas de mise à jour de la barre d'état de style correctement. Vous devez utiliser
- À-dire iOS pour actualiser l'état de la barre de style, manuellement. J'espère que quelqu'un ferait gagner un peu de temps sur le savoir.
Le plus simple swift 3 solution pour moi a été:
Aucune des réponses ci-dessus sont de travail pour moi.
J'ai deux questions.
Solution
L'état noir - je supprimer tous les éléments de navigation de la barre de personnalisation
//commentaire en dessous de la ligne dans AppDelegate
[[UINavigationBar apparence] setBackgroundImage:[UIImage imageNamed:@"nav_bg"] forBarMetrics:UIBarMetricsDefault];
Transparence de la barre de titre - set navigationBarHidden = Oui pour MFMailComposeViewController
composeViewController.navigationBarHidden = OUI;
Il semble que l'initialisation de la MFMailComposeViewController UIApplication.partagé.statusBarStyle va changer .par défaut... donc, l'enregistrement de l'état avant et réglage de nouveau après la présentation résolu le problème pour moi:
iOS 7 présente une méthode
prefersStatusBarHidden
, mais il ne sera pas si facile à utiliser dans ce cas. Vous préférerez peut-être utiliser lastatusBarHidden
propriété deUIApplication
tandis que le modal est présenté.Dans mon cas, j'ai été en utilisant "- vue-contrôleur d'état basé sur l'apparence de la barre" et de présenter un modal-vue-contrôleur avec une coutume des enchaînements de transition et puis la présentation de la MFMailComposeViewController à partir de là. Dans ce cas, par défaut, iOS ne respecte/utilise le présentant ou "racine" vue du contrôleur de
preferredStatusBarStyle
méthode.Donc, une fois que j'ai changé
childViewControllerForStatusBarStyle
dans ma vue de la racine contrôleur etpreferredStatusBarStyle
dans mon modal-vue-contrôleur, tout a fonctionné comme prévu... quelque chose comme ceci:Je suis en création d'une application dans iOS8 et ont eu des problèmes avec la barre de statut avec toutes les fonctions telles que la messagerie compositeur, l'appareil photo, etc.. La suite permettra de résoudre vos problèmes:
Placez la ligne suivante dans votre fichier plist
Si vous utilisez le ajouter une ligne caractéristique dans le storyboard, le UIViewControllerBasedStatusBarAppearance n'est pas une option. Aussi lors de l'ajout d'une ligne il demande BOOLÉEN (OUI/NON). Il ne peut pas être une chaîne de caractères dans le code source, il doit être un booléenne faux. Ouvrir le fichier plist comme le code source au lieu et ajoutez le au-dessus des lignes. Supprimer votre ancien tentatives. Vous allez maintenant être en mesure d'appliquer avec succès les extraits de code donné dans de nombreux incomplète réponses trouvées sur le net.
Vous pouvez maintenant ajouter des changements globaux dans la délégué d'application fichier et/ou des remplacements dans les contrôleurs eux-mêmes. Sans ci-dessus en place de tous les débordement de pile dans le code, j'ai essayé a échoué lors de l'utilisation d'une fonction native. Maintenant tout fonctionne parfaitement.
Comme un test, remplacer tous les appels à toute à bord de "l'achèvement" des appels avec