Avec l'iPad iOS6, nous avons ce bug où un modal-vue-contrôleur va passer en mode plein écran, même si il est dit à être à l'aide de "formulaire" modèle de présentation. Mais, cela se produit seulement si il existe deux modaux, un parent et son enfant.
Donc, c'est comment la première modal est créée et présentée:
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is my application's root controller
C'est la façon dont l'enfant modal est créée et présentée:
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is the navigationController from above
Donc, lors de la rotation de paysage à portrait, le parent modale va passer en mode plein écran et de rester de cette façon, même si nous tourner vers le paysage.
Lorsque nous avons le parent modal tout par lui-même (pas d'enfant modale), alors qu'il fonctionne comme prévu, qui est qu'il reste en forme de feuille de style.
Notez que ce qui se passe sur iOS6 seulement (appareil et le simulateur) et n'est pas le cas sur iOS 5 (simulateur et a travaillé par les testeurs).
Jusqu'à présent, j'ai essayé sans succès:
- paramètre
wantsFullScreenLayout
deNO
- forçant
wantsFullScreenLayout
toujours y revenirNO
en la remplaçant - La fabrication de certains de mes contrôleurs à l'intérieur de la manette de navigation également spécifier
UIModalPresentationFormSheet
- la mise en œuvre de
preferredInterfaceOrientationForPresentation
- mise à niveau vers iOS 6.0.1
Merci!
Mise à JOUR: Alors, j'ai adapté la réponse de l'Forums des Développeurs Apple (https://devforums.apple.com/message/748486#748486) pour qu'il fonctionne avec de multiples imbriquées modal.
- (BOOL) needNestedModalHack {
return [UIDevice currentDevice].systemVersion.floatValue >= 6;
}
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration {
// We are the top modal, make to sure that parent modals use our size
if (self.needNestedModalHack && self.presentedViewController == nil && self.presentingViewController) {
for (UIViewController* parent = self.presentingViewController;
parent.presentingViewController;
parent = parent.presentingViewController) {
parent.view.superview.frame = parent.presentedViewController.view.superview.frame;
}
}
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration {
// We are the top modal, make to sure that parent modals are hidden during transition
if (self.needNestedModalHack && self.presentedViewController == nil && self.presentingViewController) {
for (UIViewController* parent = self.presentingViewController;
parent.presentingViewController;
parent = parent.presentingViewController) {
parent.view.superview.hidden = YES;
}
}
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
// We are the top modal, make to sure that parent modals are shown after animation
if (self.needNestedModalHack && self.presentedViewController == nil && self.presentingViewController) {
for (UIViewController* parent = self.presentingViewController;
parent.presentingViewController;
parent = parent.presentingViewController) {
parent.view.superview.hidden = NO;
}
}
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
}