UIPageViewController UIImage不显示全屏

我正在制作一个标签视图控制器的应用程序。 对于第一个选项卡,我有一个滚动浏览图片的UIPageViewController。 一切工作正常,除了图片不显示全屏。 我为图像视图设置了约束来覆盖整个视图控制器,但是当它被加载到页面视图中时,它并没有覆盖到底部。 图像被滚动的点指示器切断,然后只是白色的。

我确定它很简单,但是有没有一种方法可以让图像覆盖整个屏幕,就像我设置的约束一样?

正如你所看到的,图像停在点开始的底部。在哪里,我希望它一路下降到底部。所以点的面积是透明的。

这个页面上有个相当简单的解决scheme: http : //tunesoftware.com/?p=3363

这是通过覆盖UIPageViewControllerviewDidLayoutSubviews方法来完成的 ,基本上做了两件事:

  1. 通过将UIPageViewController的框架设置为页面控制器视图的边界来增加UIPageViewController内部的UIScrollView (内容)边界
  2. UIPageControl元素(点)移动到视图层次结构的前面,以便它位于内容的前面

这是他提供的代码(万一链接被破坏):

import UIKit class TSPageViewController: UIPageViewController { override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() var subViews: NSArray = view.subviews var scrollView: UIScrollView? = nil var pageControl: UIPageControl? = nil for view in subViews { if view.isKindOfClass(UIScrollView) { scrollView = view as? UIScrollView } else if view.isKindOfClass(UIPageControl) { pageControl = view as? UIPageControl } } if (scrollView != nil && pageControl != nil) { scrollView?.frame = view.bounds view.bringSubviewToFront(pageControl!) } } } 

所有你必须做的之后,是:

  • 如果您在故事板中设置页面控制器,那么只需转到身份检查器窗格并将其类更改为TSPageViewController
  • 如果你在代码中设置你的页面控制器,那么只要确保你为它定义的类inheritance了TSPageViewController

干杯,乔

这是Objective-C版本。 创build一个新的类(2个文件):

(1)BasePageViewController.h扩展UIPageViewController

 #import <UIKit/UIKit.h> @interface BasePageViewController : UIPageViewController @end 

(2)包含viewDidLayoutSubviews BasePageViewController.m覆盖

 #import "BasePageViewController.h" @implementation BasePageViewController - (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; UIScrollView *scrollView = nil; UIPageControl *pageControl = nil; for(UIView *view in self.view.subviews) { if([view isKindOfClass:[UIScrollView class]]) { scrollView = (UIScrollView *)view; }else if([view isKindOfClass:[UIPageControl class]]) { pageControl = (UIPageControl *)view; } } if(scrollView != nil && pageControl!=nil) { scrollView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); [self.view bringSubviewToFront:pageControl]; } } @end