У меня есть UIViewController, который содержит другие ViewController. Начальный ViewController устанавливается в viewDidLoad:
FirstViewController *first = [FirstViewController alloc] init];
first.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
first.view.frame = m_content.frame;
[self addChildViewController:first];
[m_content.view addSubview:first.view];
[first didMoveToParentViewController:self];
m_activeViewController = first;
Этот контроллер контейнера реализовал автоматически ForwardAppearanceAndRotationMethodsToChildViewControllers для возврата YES. Он также реализовал ручное вращение вперед для неактивных ViewControllers.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
for(UIViewController *vc in m_viewControllers)
{
if(vc != [m_activeViewController]
[vc willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
for(UIViewController *vc in m_viewControllers)
{
if(vc != [m_activeViewController]
[vc didRotateFromInterfaceOrientation:fromInterfaceOrientation];
}
}
Когда кнопка меню нажата, я делаю переход между ViewControllers.
- (void)onMenuItemTapped:(id)sender
{
UIViewController *vc = [m_viewControllers objectAtIndex:sender.tag];
vc.view.frame = m_content.frame;
[self addChildViewController:vc];
[self transitionFromViewController:m_activeViewController toViewController:vc duration:0 options:UIViewAnimationOptionTransitionNone animations:nil completion:^(BOOL finished) {
[vc didMoveToParentViewController:self];
[m_activeViewController removeFromParentViewController];
m_activeViewController = vc;
}];
}
Этот переход отлично работает для моих «обычных» ViewController, и они правильно отображаются после изменения ориентации, даже если они не активны. Однако один из этих контроллеров дочернего представления, называемый SecondCV, имеет UIPageViewController в качестве контроллера дочернего представления. У меня есть UIPageViewControllerDelegate и UIPageViewControllerDataSource, установленные для этого SecondCV, и в pageViewController:spineLocationForInterfaceOrientation: я возвращаю UIPageViewControllerSpineLocationMin для книжной ориентации и UIPageViewControllerSpineLocationMid для альбомной ориентации. Поворот для этого SecondVC работает правильно, когда он активен - две страницы в альбомном режиме и одна в портретном режиме отображаются правильно. Но когда этот SecondVC не активен, вращение неправильное. Даже если вызывается pageViewController:spineLocationForInterfaceOrientation:, остается одна страница как в портретном, так и в альбомном режимах. Я пытаюсь исправить это в течение некоторого времени, но я не вижу других вариантов. У вас есть идеи, как это исправить?
Спасибо.