autolayout - iOS 8 UIPageViewController Aplicación de restricciones después de las transiciones
ios8 xcode6 (5)
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. La altura de la vista debe ser tanto como el valor y de su objeto que se está moviendo.
Mi aplicación tiene una vista de estilo tutorial de múltiples paneles que los usuarios pueden deslizar para aprender sobre la aplicación. Esto se implementa mucho como se describe en este tutorial . Después de implementarlo para iOS 7 y 8, comparo cómo funcionan y encuentro problemas con este último: estoy ejecutando Xcode 6 GM aquí.
Parece que UIPageViewController procesa 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 una muestra de salida:
Frame size before: {{0, 0}, {600, 600}}
Frame size after: {{0, 0}, {320, 568}}
Esto se manifiesta así: deslice hacia la izquierda para acceder a la siguiente vista y observe un espacio en blanco de 32 puntos en la parte inferior de la nueva vista. Una vez que se completa la transición, se desplaza a su diseño adecuado.
¿Es esto un error en iOS 8, tal vez? Estoy completamente fuera de lugar en este momento.
He estado luchando con esto por unos días.
Traté de implementarlo instanciando la página ViewController del guión gráfico. Se produjo un cambio de tamaño definitivo. Comprobando el tamaño del marco en
- pageViewController: viewControllerAfterViewController
- pageViewController: willTransitionToViewControllers
- pageViewController: didFinishAnimating: previousViewControllers
El tamaño de la trama siempre cambiará entre las llamadas a 1 y 3 . A veces antes de las 2 y a veces después.
Si también usa guiones gráficos, pude resolver el problema extrayendo los elementos de la interfaz de usuario 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 hizo sentir productivo. Espero eso ayude.
Me di cuenta de 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 establezca antes de la transición en un PageViewController.
puedes hacer esto así:
Recuerde desmarcar "Restringir a los márgenes"
Para cualquiera que tenga este problema, para mí parecía ser que estaba presentando vistas "relativas al margen" (una nueva característica en iOS 8).
En lugar de:
Utilizar:
Para mí, la solución era fijar la parte superior de la tabla Ver a la supervista: Editor -> Fijar -> Espacio superior a SuperView (iOS8)