Con iPad con iOS6, abbiamo questo bug in cui un controller di visualizzazione modale si espanderà a schermo intero, anche se viene detto a di utilizzare lo stile di presentazione "foglio di calcolo". Ma, questo succede solo se ci sono due modali, uno genitore e suo figlio.iOS 6: ModalPresentationStyle modale del genitore ignorata dopo la rotazione
Quindi questo è il modo viene creato e presentato il primo modale:
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is my application's root controller
Questo è come è stato creato e presentato il modal bambino:
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is the navigationController from above
Così, quando la rotazione dal paesaggio al ritratto, il la modale genitore si espanderà a schermo intero e rimarrà così anche se ruoteremo di nuovo in orizzontale.
Quando il modale padre è tutto da solo (nessuna modal figlio), funziona come previsto, ovvero rimane nello stile del foglio di forma.
Si noti che questo si verifica solo su iOS6 (dispositivo e simulatore) e non si verifica su iOS 5 (simulatore e segnalato al lavoro dai tester).
Finora, ho provato quanto segue senza successo:
- impostazione
wantsFullScreenLayout
-NO
- costringendo
wantsFullScreenLayout
per tornare sempreNO
scavalcarlo - Fare certi miei regolatori all'interno del controller di navigazione anche specificare
UIModalPresentationFormSheet
- in esecuzione
preferredInterfaceOrientationForPresentation
- aggiornamento a iOS 6.0.1
Grazie!
UPDATE: Così, ho adattato la risposta da parte dei forum di Apple Developer (https://devforums.apple.com/message/748486#748486) in modo che funzioni con più modale nidificato.
- (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];
}
Qualcuno mi ha indirizzato ai forum per sviluppatori Apple e ho trovato questo: https://devforums.apple.com/message/748486 – GenesisST
La presentazione di più modali interrompe chiaramente il modo in cui Apple dice che dovresti fare le cose. Se finisci per fare cose come questa che vanno contro i consigli di Apple, allora aspettati problemi come questo. Considerate anche che probabilmente avete un design pessimo. Se vuoi mostrare più viewController come questo dovresti usare il contenimento o un controller di navigazione in una singola presentazione modale. Che cosa hai intenzione di fare quando si interrompe di nuovo in iOS 6.3? – ader
@Ade: questo documento indica che è possibile concatenare i controller di visualizzazione modali: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html#//apple_ref/doc/ uid/TP40007457-CH111-SW1 – GenesisST