UIPageViewController no cambia el tamaño de sus controlleres secundarios de vista

Tengo un controller de vista configurado mediante progtwigción que tiene un UIPageViewController hijo. Esto muestra varios otros controlleres de vista que también se configuran mediante progtwigción. Estas vistas de los controlleres de vista tienen translatesAutoresizingMaskIntoConstraints configuradas en YES , pero la vista del controller de vista de página usa restricciones para posicionarse en el controller de vista superior.

El problema es que, cuando el usuario rota el dispositivo, el controller de vista de página cambia el tamaño de su marco, pero los controles secundarios no lo hacen. Por didRotateFromInterfaceOrientation , su marco sigue siendo de la orientación anterior. He verificado que los methods de rotation se invocan en los controlleres secundarios de vista, su marco simplemente no cambia.

Configuré el controller de vista de página así:

 self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; self.pageViewController.view.backgroundColor = [UIColor clearColor]; self.pageViewController.view.translatesAutoresizingMaskIntoConstraints = NO; self.pageViewController.dataSource = self; self.pageViewController.delegate = self; [self.pageViewController willMoveToParentViewController:self]; [self.view addSubview:self.pageViewController.view]; [self addChildViewController:self.pageViewController]; [self.pageViewController didMoveToParentViewController:self]; self.currentPageIndex = 0; self.currentPageController = [self pageForIndex:self.currentPageIndex]; self.currentPageController.delegate = self; [self.pageViewController setViewControllers:@[self.currentPageController] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL]; 

He intentado llamar a setNeedsLayout pero es una animation de rotation torpe y la siguiente página a la que setNeedsLayout tampoco se cambia de tamaño correctamente.

¿Por qué el controller de vista de página no cambia el tamaño de sus controlleres de vista secundarios y cómo puedo hacer esto?

¡Gracias!

Primero, configure todo con layout automático, programáticamente o Storyboard. Luego, capte el cambio de orientación en el controller de vista primaria y forzar nuevamente la vista de la vista UIPageViewController.

Este es mi código de trabajo (iOS 8.0 y posterior). childController1 se configuró en un Storyboard con todo el layout usando restricciones e instanciado con [self.storyboard instantiateViewControllerWithIdentifier:@"ChildControllerId"] .

 - (void)createPageController { ... pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; pageController.dataSource = self; [pageController setViewControllers:@[childController1] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; [self addChildViewController:pageController]; [self.view addSubview:pageController.view]; UIView *pageView = pageController.view; pageView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[pageView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(pageView)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[pageView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(pageView)]]; [pageController didMoveToParentViewController:self]; ... } - (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [pageController.view setNeedsLayout]; [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator]; } 

Espero eso ayude.

Agregar la vista de un controller directamente a la vista de otro controller y esperar que se invocen los methods de rotation y ciclo de vida no es la mejor política. Siento que agregarlo a la jerarquía del controller podría funcionar, pero no puedo comentar mucho al respecto.

Probé con un browser de barra de tabs y mi UIPageViewController obtuvo los events junto con el controller que se mostraba en UIPageViewController. Supongo que si presiono el controller en un UINavigationController obtendré el mismo resultado.

Te recomiendo que muestres tu UIPageVIewController de una manera más estándar que agregando su vista a la vista de otro controller.