Если вы посмотрите на Шаблон приложения на основе страницы в XCode, вы найдете следующий метод UIPageViewControllerDelegate:
- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
{
if (UIInterfaceOrientationIsPortrait(orientation)) {
// In portrait orientation: Set the spine position to "min" and the page view controller's view controllers array to contain just one view controller. Setting the spine position to 'UIPageViewControllerSpineLocationMid' in landscape orientation sets the doubleSided property to YES, so set it to NO here.
UIViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
self.pageViewController.doubleSided = NO;
return UIPageViewControllerSpineLocationMin;
}
// In landscape orientation: Set set the spine location to "mid" and the page view controller's view controllers array to contain two view controllers. If the current page is even, set it to contain the current and next view controllers; if it is odd, set the array to contain the previous and current view controllers.
DataViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
NSArray *viewControllers = nil;
NSUInteger indexOfCurrentViewController = [self.modelController indexOfViewController:currentViewController];
if (indexOfCurrentViewController == 0 || indexOfCurrentViewController % 2 == 0) {
UIViewController *nextViewController = [self.modelController pageViewController:self.pageViewController viewControllerAfterViewController:currentViewController];
viewControllers = [NSArray arrayWithObjects:currentViewController, nextViewController, nil];
} else {
UIViewController *previousViewController = [self.modelController pageViewController:self.pageViewController viewControllerBeforeViewController:currentViewController];
viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil];
}
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
return UIPageViewControllerSpineLocationMid;
}
При возврате UIPageViewControllerSpineLocationMid из вышеуказанного метода вы сообщаете UIPageViewController, что он должен отображать два UIViewController рядом (то есть две страницы).
Ключевым моментом здесь является то, что вы должны передать правильное количество UIViewControllers при вызове setViewControllers UIPageViewController: direction: animated: завершение: метод.
- Отображение двух страниц? Пройдите два UIViewControllers.
- Показ одной страницы? Передайте один UIViewController.
Код, который вы представили, никогда не передаст более одного UIViewController в UIPageViewController.
Если UIPageViewControllerSpineLocation не соответствует количеству передаваемых вами контроллеров UIViewController, это приведет к сбою или просто ничего не сделает.
Дайте мне знать, если вам понадобится дополнительная помощь.