如何删除UIPageViewController的底部间隙

vis*_*kar 13 objective-c ios uipageviewcontroller

我正在使用UIPageViewController来全屏显示图像,UIViewController被添加到UIPageController作为子视图/子图像使用ImageView显示图像.问题是图像没有全屏显示,而是页面控制视图的底部显示在底部并且该空间完全被浪费.请查看附件中的图片.

在此输入图像描述

这是代码

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];
Run Code Online (Sandbox Code Playgroud)

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

我相信必须有一种方法可以全屏显示.

***如果重要的话,MainViewController也是故事板的一部分.

vis*_*kar 39

最后自己得到了解决方案我只是从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);
Run Code Online (Sandbox Code Playgroud)


小智 21

好奇.该文件说:

如果实现了"支持页面指示符"中的两个方法,并且页面视图控制器的转换样式为UIPageViewControllerTransitionStyleScroll,则页面指示符可见.

这两种方法是:

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

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController { 
}
Run Code Online (Sandbox Code Playgroud)

您是否实现了这两种数据源方法?如果是这样,也许如果你删除它们,你不必手动删除页面控件(点)?快速测试将改变

UIPageViewControllerTransitionStyleScroll
Run Code Online (Sandbox Code Playgroud)

UIPageViewControllerTransitionStylePageCurl
Run Code Online (Sandbox Code Playgroud)

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

  • 删除上述两种方法,也删除了点和间隙.成功! (4认同)
  • 你是对的,如果切换到PageCurl过渡样式,页面控制指示器会消失. (2认同)

g.r*_*ion 14

只有在实现以下方法后才会显示UIPageViewController点:

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController;
Run Code Online (Sandbox Code Playgroud)

检查你的代码.并且在此方法中返回零将隐藏点(UIPageControl)


ZaE*_*FaR 5

I am adding for swift 2.2 compatible code

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

This is the Swift 4 compatible solution, embedded in viewDidLayoutSubviews

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
    }
}
Run Code Online (Sandbox Code Playgroud)