Controlador de vista modal iOS 7+ Dismiss y orientación vertical forzada

Tengo un UINavigationController como controlador de vista raíz de mi UIWindow en iOS 7 e iOS 8. Desde uno de sus controladores de vista, presento un controlador de vista modal de pantalla completa con un estilo de presentación de disolución cruzada. Este controlador de vista modal debería poder rotar a todas las orientaciones, y funciona bien.

El problema es cuando el dispositivo se mantiene en una orientación horizontal y se descarta el controlador de vista modal. El controlador de vista que presentó el modal solo admite la orientación vertical, y he confirmado que UIInterfaceOrientationMaskPortrait se devuelve a -application: SupportInterfaceOrientationsForWindow :. -shouldAutorotate devuelve SÍ, también. Sin embargo, la orientación del controlador de vista de presentación, después de descartar el modal, sigue siendo horizontal. ¿Cómo puedo forzarlo a permanecer en orientación vertical y permitir que el modal tome la orientación del dispositivo? Mi código sigue:

Delegado de la aplicación:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        UINavigationController *navigationController = (UINavigationController *)self.deckController.centerController;
        NSArray *viewControllers = [navigationController viewControllers];
        UIViewController *top = [viewControllers lastObject];

        if (top && [top presentedViewController]) {
            UIViewController *presented = [top presentedViewController];
            if ([presented respondsToSelector:@selector(isDismissing)] && ![(id)presented isDismissing]) {
                top = presented;
            }
        }

        return [top supportedInterfaceOrientations];
    }

    return (UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight);
}

Presentación del controlador de vista:

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

Controlador de vista modal:

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskLandscape|UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskPortrait);
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta