如何删除UIPageViewController的底部空隙

我正在使用UIPageViewController来显示全屏图像,UIViewController被添加到UIPageController作为子视图/子使用ImageView显示的图像。 问题是图像arent全屏,而不是页面控制视图的donts出现在底部,该空间是完全浪费。 请检查附加的图像。

在这里输入图像说明

这是代码

self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; self.pageController.dataSource = self; [[self.pageController view] setFrame:[[self view] bounds]]; NewsItemViewController *initialViewController = [self viewControllerAtIndex:0]; NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; [self addChildViewController:self.pageController]; [[self view] addSubview:[self.pageController view]]; [self.pageController didMoveToParentViewController:self]; 

这里NewsItemViewController是显示图像和一些文本的UIViewController,MainViewController在MainViewController中实现了UIPageViewControllerDataSource协议和必要的方法。

我相信必须有一种方法来全屏显示。

***另外,MainViewController是一个故事板的一部分,如果重要的话。

最后我自己得到了解决scheme我只隐藏从UIViewPageController的页面控制,然后扩大UIPageViewController的大小,以掩盖由于缺乏页面控制留下的差距。

  NSArray *subviews = self.pageController.view.subviews; UIPageControl *thisControl = nil; for (int i=0; i<[subviews count]; i++) { if ([[subviews objectAtIndex:i] isKindOfClass:[UIPageControl class]]) { thisControl = (UIPageControl *)[subviews objectAtIndex:i]; } } thisControl.hidden = true; self.pageController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height+40); 

好奇。 文档说:

如果“支持页面指示器”中的两种方法均已实现,并且页面视图控制器的过渡样式为UIPageViewControllerTransitionStyleScroll,则页面指示器可见。

这两种方法是:

 - (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController { } - (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController { } 

你在实现这两个数据源方法吗? 如果是这样,也许如果你删除它们,你将不必手动删除页面控制(点)? 一个快速的testing将是改变

 UIPageViewControllerTransitionStyleScroll 

 UIPageViewControllerTransitionStylePageCurl 

并查看页面控制指示符点是否消失。 (当然,在评论你的隐藏方法之后)

UIPageViewController点仅在执行以下方法时显示:

 - (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController; 

检查你的代码。 并且在这个方法中也返回零将隐藏点(UIPageControl)

我添加了快速2.2兼容的代码

 for view in self.view.subviews { if view.isKindOfClass(UIScrollView) { view.frame = UIScreen.mainScreen().bounds } else if view.isKindOfClass(UIPageControl) { view.backgroundColor = UIColor.clearColor() } } 

这是embedded在viewDidLayoutSubviews的Swift 4兼容解决scheme

 for view in self.view.subviews { if view.isKind(of:UIScrollView.self) { view.frame = UIScreen.main.bounds } else if view.isKind(of:UIPageControl.self) { view.backgroundColor = UIColor.clear } } 

Swift版本:)。 在UIPageViewController子类内部为下面的实现返回零。 func presentationCountForPageViewController(pageViewController:UIPageViewController) – > Int {return 0}

 func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 } 

设置你的寻呼机控制器

 self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; self.pageController.dataSource = self; [[self.pageController view] setFrame:[[self view] bounds]]; 

并且实现,这个方法应该返回大于1的任何值

 - (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController { // The selected item reflected in the page indicator. return 2; } 

现在在底部空间的差距被删除,没有页面控制显示:)

将下面的代码粘贴到你的UIPageViewController中:

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if let pageScrollView = view.subviews.first { pageScrollView.frame = view.bounds } }