J'ai eu le même problème:
- application de démarrage en mode portrait (par exemple)
- lecteur vidéo de lancement (le nôtre est illustrée à l'aide
presentModalViewController
).
- Rotation de l'iPad
- Quittez la vidéo en appuyant sur Terminé.
Bam! La disposition de notre application est cassée (nous faisons une mise en page personnalisée pour chaque orientation), et la barre d'état est au mauvais endroit, bien qu'elle soit au bon endroit en vidéo.
J'ai fait deux choses à régler les deux problèmes:
- assurer que notre configuration personnalisée, ce qui se fait dans
viewWillAppear
, se fait après l'appel [super viewWillAppear];
.
- mettre en œuvre des observateurs pour
MPMoviePlayerDidExitFullscreenNotification
et MPMoviePlayerPlaybackDidFinishNotification
(le premier n'a jamais été appelé en cliquant sur «Terminé» dans mon cas).
Le code pour le rappel de l'observateur regarde comme ceci:
[self performSelector: @selector(checkAndFixStatusBar)
withObject: nil
afterDelay: 0];
[[NSNotificationCenter defaultCenter] removeObserver: self];
Et la dernière méthode, appelée après un 0 retard intentionnel:
- (void)checkAndFixStatusBar
{
UIInterfaceOrientation intOrient = self.interfaceOrientation;
UIInterfaceOrientation sbOrient = [[UIApplication sharedApplication] statusBarOrientation];
if (intOrient != sbOrient)
{
[[UIApplication sharedApplication] setStatusBarOrientation: intOrient animated: NO];
NSLog(@"Fixed status bar orientation");
}
}
Il y a encore un clignotement percevable de la barre d'état, mais c'est le meilleur que j'ai trouvé.
Espérons que cela aide.
EDIT: J'ai supprimé l'étape performSelector
, et appelé directement la configuration de la barre d'état, dans mon cas, cela ne fait aucune différence notable (toujours clignotant).
Apparemment, cet utilisateur appartient à Super User. – Noldorin