Bei iPad mit iOS6 haben wir diesen Fehler, bei dem ein Modalansicht-Controller auf Vollbild erweitert wird, auch wenn er den Präsentationstil "Formularblatt" verwendet. Aber das passiert nur, wenn es zwei Modale gibt, ein Elternteil und sein Kind.iOS 6: modalPresentationStyle des übergeordneten Modales wird nach der Drehung ignoriert
Also das ist, wie die erste modale erstellt und präsentiert werden:
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is my application's root controller
Dies ist, wie das Kind modal erstellt und präsentiert werden:
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is the navigationController from above
Also, wenn von Quer- auf Hochformat gedreht wird, die Übergeordnetes Modal wird auf Vollbild erweitert und bleibt auch dann erhalten, wenn wir in die Landschaft zurückkehren.
Wenn wir das Parent-Modal ganz allein haben (kein Child-Modal), dann funktioniert es wie erwartet, das heißt, es bleibt im Formular-Sheet-Stil.
Beachten Sie, dass dies nur auf iOS6 (Gerät und Simulator) geschieht und nicht auf iOS 5 (Simulator und von Testern gemeldet).
Bisher habe ich das ohne Erfolg folgendes versucht:
wantsFullScreenLayout
zuNO
- zwingen
wantsFullScreenLayout
Einstellung immerNO
zurückzukehren, indem es - macht sicher, dass meine Controller innerhalb des Navigationscontroller auch zwingenden angeben
UIModalPresentationFormSheet
- Implementierung
preferredInterfaceOrientationForPresentation
- Upgrade auf iOS 6.0.1
Vielen Dank!
UPDATE: Also, angepasst ich die Antwort von den Apple Developer Forums (https://devforums.apple.com/message/748486#748486), so dass es mit mehreren verschachtelten modal funktioniert.
- (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];
}
Jemand wies mich auf die Apple Entwickler-Foren und ich fand dies: https://devforums.apple.com/message/748486 – GenesisST
Präsentieren mehrere Modale eindeutig bricht die Art und Weise Apple sagen Sie sollten Dinge tun. Wenn Sie solche Dinge tun, die gegen den Rat von Apple verstoßen, dann erwarten Sie solche Probleme. Bedenken Sie auch, dass Sie wahrscheinlich ein sehr schlechtes Design haben. Wenn Sie mehrere ViewController wie diese anzeigen möchten, sollten Sie containment oder einen navigationController in einer einzelnen modalen Präsentation verwenden. Was wirst du tun, wenn das in iOS 6.3 wieder aufhört? – ader
@Ade: In diesem Dokument wird erwähnt, dass es möglich ist, Modal View-Controller zu verketten: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html#//apple_ref/doc/ uid/TP40007457-CH111-SW1 – GenesisST