UIPageViewController必须是全屏的吗?

时间:2014-10-28 09:58:59

标签: ios objective-c swift uipageviewcontroller

UIPageViewController是否必须全屏显示? 可以将它嵌入到其他可视容器中的较小矩形中,例如UIViewUINavigationControllerUITabBarController的一角吗?

2 个答案:

答案 0 :(得分:7)

不,它不一定是全屏的。实际上它可以用作任何其他UIViewController。如果要将其嵌入较小的矩形,可以使用UIViewController containment

假设您希望将其嵌入到父控制器中,该父控制器是UIViewController子类。然后定义pageViewController属性并将其添加为viewDidLoad中的子视图控制器:

self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageViewController.view.frame = ... //set the frame or add autolayout constraints

[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];

答案 1 :(得分:0)

尽管从技术上来说答案是肯定的,但UIPageViewController会将其页面放置在屏幕顶部,即使其自身的框架从屏幕下方开始也是如此。结果是页面的顶部将被剪掉。

我试图通过设置已加载页面的框架以匹配pageController视图的框架来解决此问题,但是遇到了几个问题。其中之一是,直到视图出现时才设置框架,从而导致可见的偏移。您不能使用viewWillAppear来防止这种情况,因为这不是在pageView控制器上调用,而是在子代上调用。

您可以通过布局页面以将其所有内容向下移动到足以显示的方式来解决此问题,但这当然是一种硬编码的解决方案,并不十分灵活。

可能有一个程序化的解决方案;我考虑过将每个页面上的内容放到UIScrollView上,并尝试根据UIPageView的运行时框架找到时间来设置内容偏移量。