iOS 8 UIPageViewController aplicando restricciones después de las transiciones

Mi aplicación tiene una vista de estilo tutorial de múltiples paneles que los usuarios pueden deslizar para conocer la aplicación. Esto se implementa en gran medida como se describe en este tutorial . Después de haberlo implementado para iOS 7 y 8, estoy comparando cómo funcionan, y encontrando problemas con este último: estoy ejecutando Xcode 6 GM aquí.

Parece que UIPageViewController representa las vistas una vez que se completa la transición. Anulé los métodos de delegado para ver qué estaba pasando:

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers { NSLog(@"Frame size before: %@", NSStringFromCGRect([(UIViewController*)pendingViewControllers[0] view].frame)); } - (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed { NSLog(@"Frame size after: %@", NSStringFromCGRect([(UIViewController*)previousViewControllers[0] view].frame)); } 

Y aquí hay un resultado de muestra:

 Frame size before: {{0, 0}, {600, 600}} Frame size after: {{0, 0}, {320, 568}} 

Esto se manifiesta de la siguiente manera: desliza hacia la izquierda para obtener la siguiente vista y observa un espacio en blanco de 32 puntos en la parte inferior de la nueva vista. Una vez que se completa la transición, adopta su diseño adecuado.

¿Es esto un error en iOS 8, quizás? Estoy fuera de conjeturas en este punto.

Descubrí que necesitas basar tus restricciones en la vista y no en la guía de diseño de tu controlador de vista. Esto asegurará que su controlador de vista respete las restricciones que estableció antes de la transición en un PageViewController.

puedes hacer esto así:

Ejemplo de restricciones

Recuerde desmarcar “Restringir a los márgenes”

Para cualquiera que tenga este problema, para mí parece ser que estaba diseñando vistas “relativas al margen” (una nueva característica en iOS 8).

En lugar de:

enter image description here

Utilizar:

enter image description here

He estado luchando con esto por unos días.

Traté de implementarlo instanciando la página ViewController del guión gráfico. Hubo un cambio de tamaño definitivo ocurriendo. Verificando el tamaño del marco en

  1. pageViewController: viewControllerAfterViewController
  2. pageViewController: willTransitionToViewControllers
  3. pageViewController: didFinishAnimating: previousViewControllers

El tamaño del marco siempre cambiará entre las llamadas a 1 y 3 . Algunas veces antes de las 2 y algunas veces después.

Si también está usando storyboards, pude resolver el problema extrayendo los elementos de la IU de la página en su propio archivo XIB, estableciendo las restricciones en IB y luego creando las páginas con una llamada a initWithNibName .

No es una respuesta completa, pero me devolvió a sentirme productivo. Espero eso ayude.

Para mí, la solución fue fijar la parte superior de la tabla Vista a la super visión: Editor -> Pin -> Superior espacio a SuperView (iOS8)

Es un error en iOS 8 pero encontré una solución:

Agregue una vista vacía en la parte superior de la barra de estado en su Storyboard. El alto de la vista debe ser tanto como el valor y de su objeto que se está moviendo.

Imagen de las restricciones correctas