ios - page - Controlador de vista infantil se desplaza hacia abajo
swift page control tutorial (2)
Parece que encontré la solución, estaba relacionado con las restricciones de diseño automático que había configurado. Mi controlador de vista infantil contiene una vista de imagen que lo llena por completo. Así que doy las siguientes restricciones a la vista de imagen:
- Centrar horizontalmente en contenedor
- Centrar verticalmente en contenedor
- Anchos iguales (a la vista de contenedor)
- Alturas iguales (a la vista de contenedor)
Esto detiene el problema de desplazamiento / parpadeo de la vista.
Tengo un TutorialsViewController que tiene un PageViewController agregado programáticamente como:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// Create page view controller
self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TutorialsPageViewController"];
self.pageViewController.dataSource = self;
TutorialsContentViewController *startingViewController = [self viewControllerAtIndex:0];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
}
Y añado TutorialsContentViewController al PageViewController usando los métodos de delegado:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
NSUInteger index = ((TutorialsContentViewController*) viewController).pageIndex;
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
index--;
return [self viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSUInteger index = ((TutorialsContentViewController*) viewController).pageIndex;
if (index == NSNotFound) {
return nil;
}
index++;
if (index == [self.tutorialsArray count]) {
return nil;
}
return [self viewControllerAtIndex:index];
}
- (TutorialsContentViewController *)viewControllerAtIndex:(NSUInteger)index {
if (([self.tutorialsArray count] == 0) || (index >= [self.tutorialsArray count])) {
return nil;
}
// Create a new view controller and pass suitable data.
TutorialsContentViewController *tutorialsContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TutorialsContentViewController"];
tutorialsContentViewController.imageName = [self.tutorialsArray objectAtIndex:index];
tutorialsContentViewController.pageIndex = index;
return tutorialsContentViewController;
}
Ahora cuando ejecuto esto en el simulador, puedo ver que todo funciona bien, solo que el próximo controlador de vista infantil parece estar sobre la barra de estado y se desplaza hacia abajo a medida que me desplazo.
He intentado self.automaticallyAdjustsScrollViewInsets = false en Parent View Controller, pero la vista secundaria aún se desplaza hacia abajo. El controlador de vista secundaria tiene un ImageView que tiene restricciones iniciales, finales, superiores e inferiores establecidas en 0 inicialmente (esto causa el cambio).
Cuando centro la imagen horizontal y verticalmente y le doy la altura y el ancho fijos, funciona bien sin embargo. Pero quiero que la imagen llene por completo el controlador de vista infantil.
¿Cómo resolver este problema de desplazamiento de vista? Por favor ayuda.
Gracias.
He resuelto este problema con la ayuda de esta respuesta: iOS 8 UIPageViewController Aplicando restricciones después de las transiciones reemplazando en el elemento secundario de PageViewController todas las restricciones en la guía de diseño superior para ver.