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 ytoViewController
La 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