У меня есть 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. Он также реализовал ручное вращение вперед для неактивных ViewController
- (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 :, в портретном и альбомном режимах остается одна страница. Я пытаюсь исправить это в течение некоторого времени, но я не вижу других вариантов. У вас есть идеи, как это исправить?
Спасибо.