La guía de diseño superior del controlador de navegación no se acepta con una transición personalizada

Version corta:

Tengo un problema con la guía de diseño superior de diseño automático cuando se utiliza junto con la transición personalizada yUINavigationController en iOS7. Específicamente, la restricción entre la guía de diseño superior y la vista de texto no se cumple. ¿Alguien ha encontrado este problema?

Versión larga:

Tengo una escena que tiene restricciones inequívocas de definición (es decir, superior, inferior, izquierda y derecha) que hace que una vista sea así:

Pero cuando uso esto con una transición personalizada en el controlador de navegación, la restricción superior a la guía de diseño superior parece desactivada y se muestra como sigue, como si la guía de diseño superior estuviera en la parte superior de la pantalla, en lugar de en la parte inferior del controlador de navegación:

Parece que la "guía de diseño superior" con el controlador de navegación se confunde al emplear la transición personalizada. El resto de las restricciones se están aplicando correctamente. Y si giro el dispositivo y lo vuelvo a girar, todo se procesa de repente, por lo que no parece que las restricciones no se definan correctamente. Del mismo modo, cuando desactivo mi transición personalizada, las vistas se representan correctamente.

Una vez dicho esto,_autolayoutTrace está informando que elUILayoutGuide los objetos sufren deAMBIGUOUS LAYOUT, cuando corro:

(lldb) po [[UIWindow keyWindow] _autolayoutTrace]

Pero esas guías de diseño siempre se reportan como ambiguas cuando las veo, aunque me he asegurado de que no falten restricciones (he hecho la selección habitual del controlador de vista y seleccionando "Agregar restricciones faltantes para el controlador de vista" o seleccionando todas de los controles y haciendo lo mismo por ellos).

En cuanto a la precisión con la que estoy haciendo la transición, he especificado un objeto que se ajusta aUIViewControllerAnimatedTransitioning en elanimationControllerForOperation método:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                  animationControllerForOperation:(UINavigationControllerOperation)operation
                                               fromViewController:(UIViewController*)fromVC
                                                 toViewController:(UIViewController*)toVC
{
    if (operation == UINavigationControllerOperationPush)
        return [[PushAnimator alloc] init];

    return nil;
}

Y

@implementation PushAnimator

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
    return 0.5;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController* toViewController   = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    [[transitionContext containerView] addSubview:toViewController.view];
    CGFloat width = fromViewController.view.frame.size.width;

    toViewController.view.transform = CGAffineTransformMakeTranslation(width, 0);

    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        fromViewController.view.transform = CGAffineTransformMakeTranslation(-width / 2.0, 0);
        toViewController.view.transform = CGAffineTransformIdentity;
    } completion:^(BOOL finished) {
        fromViewController.view.transform = CGAffineTransformIdentity;
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
    }];
}

@end

También he hecho una versión de lo anterior, estableciendo elframe de la vista en lugar de latransform, con el mismo resultado.

También he intentado manualmente asegurarme de que las restricciones se vuelvan a aplicar llamandolayoutIfNeeded. También he intentadosetNeedsUpdateConstraints, setNeedsLayout, etc.

En resumen, ¿alguien se ha casado con éxito con la transición personalizada del controlador de navegación con restricciones que usan la guía de diseño superior?

Respuestas a la pregunta(12)

Su respuesta a la pregunta