Transición personalizada para animación push con NavigationController en iOS 9

Tengo una transición de inserción personalizada entre los controladores de vista integrados en unUINavigationController que funciona bien cuando se compila con iOS 7/8 pero presenta un diseño incorrecto cuando se compila con iOS 9 SDK.

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

  [transitionContext.containerView addSubview:toViewController.view];

  ...

Luego continúa y realiza una animación. El problema es que el contenido de latoViewController, aunque utiliza la restricción de diseño automático de la guía de diseño superior derecha, presenta el contenido detrás de la barra de navegación.

Sin embargo, funciona bien en iOS 8 y si forzamos un redibujo (por ejemplo, enviar la aplicación a un segundo plano y traerla de vuelta, presentar un modal en la parte superior y descartarla, etc.) hará que todo el sistema de diseño automático se vuelva a dibujar ytoViewControllerLa vista salta al lugar correcto (como la guía de diseño superior, x píxeles desde la barra de navegación en lugar de x píxeles desde la parte superior de la pantalla del dispositivo).

Agregando

[self.view setNeedsUpdateConstraints];
[self.view layoutIfNeeded];

Funciona si se colocaviewDidAppear:animated, pero no funciona enviewDidLoad oviewWillAppear:animated. Esta no es una solución, ya que los usuarios verían que la vista salta cuando se produce el redibujo enviewDidAppear:animated

Respuestas a la pregunta(1)

Su respuesta a la pregunta