iOS 6: родительский модальный modalPresentationStyle игнорируется после поворота

С iPad с iOS6 у нас есть эта ошибка, при которой контроллер модального представления расширяется до полного экрана, даже если ему говорят, что он использует "бланк " стиль презентации. Но это происходит только в том случае, если есть два модала, родительский и его дочерний.

Итак, вот как создается и представляется первый модал:

UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is my application's root controller

Вот как создается и представляется дочерний модал:

UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is the navigationController from above

Таким образом, при повороте из альбомного в портретный режим родительский модал будет расширяться до полного экрана и оставаться таким же, даже если мы вернемся в альбомный режим.

Когда у нас есть родительский модальный сам по себе (без дочернего модального), тогда он работает как положено, то есть он остается в стиле листа формы.

Обратите внимание, что это происходит только на iOS6 (устройство и симулятор) и неЭто произошло на iOS 5 (симулятор и тестировщики сообщили о работе).

До сих пор я безуспешно пробовал следующее:

установкаwantsFullScreenLayout вNOфорсированиеwantsFullScreenLayout всегда возвращатьсяNO переопределив этоУбедитесь, что мои контроллеры внутри контроллера навигации также указываютUIModalPresentationFormSheetреализацииpreferredInterfaceOrientationForPresentationобновить до iOS 6.0.1

Спасибо!

ОБНОВИТЬИтак, я адаптировал ответ от форумов разработчиков Apple (https://devforums.apple.com/message/748486#748486), чтобы он работал с несколькими вложенными модальными.

- (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];
}

Ответы на вопрос(3)

Ваш ответ на вопрос