如何删除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 } }