W przypadku iPada z iOS6 mamy ten błąd, w którym kontroler widoku modalnego zostanie rozwinięty na pełny ekran, nawet jeśli zostanie mu przekazane, aby użyć stylu prezentacji "formularza arkusza". Ale dzieje się tak tylko wtedy, gdy istnieją dwa modalne, jeden nadrzędny i jego potomek.iOS 6: ModalPresentationStyle modułu macierzystego ignorowane po obrocie
Tak to jest jak pierwszy modalna jest tworzony i przedstawione:
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is my application's root controller
ten sposób modalny dziecko jest tworzona i przedstawiane:
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is the navigationController from above
więc podczas obracania z poziomej na pionową, modalny rodzic rozszerzy się do pełnego ekranu i pozostanie w ten sposób, nawet jeśli przywrócimy krajobraz.
Gdy mamy modalny nadrzędny sam (bez modalnego podrzędnego), to działa zgodnie z oczekiwaniami, czyli pozostaje w stylu arkusza formularza.
Należy pamiętać, że dzieje się tak tylko w systemie iOS6 (urządzenie i symulator) i nie ma miejsca na iOS 5 (symulator i zgłoszony do pracy przez testerów).
Dotychczas Próbowałem następujących bez powodzenia:
- zachodzącego
wantsFullScreenLayout
doNO
- zmuszając
wantsFullScreenLayout
zawsze powrócićNO
nadrzędnymi go - upewniając moje kontrolerów wewnątrz kontrolera nawigacyjnego również określić
UIModalPresentationFormSheet
- implementacja
preferredInterfaceOrientationForPresentation
- uaktualnienie do iOS 6.0.1
Dzięki!
UPDATE: Więc dostosowany odpowiedź z forum Jabłko deweloperów (https://devforums.apple.com/message/748486#748486), tak, że działa ze stwardnieniem zagnieżdżonego modalnej.
- (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];
}
Ktoś wskazał mi na forach programistów Apple i znalazłem to: https://devforums.apple.com/message/748486 – GenesisST
Przedstawianie wielu modów wyraźnie łamie sposób, w jaki Apple twierdzi, że powinieneś robić różne rzeczy. Jeśli kończysz robić takie rzeczy, które idą wbrew radom Apple'a, spróbuj spodziewać się takich problemów. Weź również pod uwagę, że prawdopodobnie masz bardzo zły projekt. Jeśli chcesz wyświetlić wiele kontrolerów viewController w ten sposób, powinieneś używać przechowalni lub kontrolera navigationController w jednej prezentacji modalnej. Co zrobisz, gdy to się powtórzy w iOS 6.3? – ader
@Ade: w tym dokumencie wymieniono kontrolery widoku modalnego: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html#//apple_ref/doc/ uid/TP40007457-CH111-SW1 – GenesisST