14

我正在使用 UIPageViewController 全屏显示图像,作为子视图/子视图添加到 UIPageController 的 UIViewController 具有使用 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];

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

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

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

4

6 回答 6

40

我自己终于得到了解决方案,我只是从 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);
于 2013-11-13T08:59:26.357 回答
21

好奇的。文档说:

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

这两种方法是:

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

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

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

UIPageViewControllerTransitionStyleScroll

UIPageViewControllerTransitionStylePageCurl

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

于 2013-11-16T19:17:03.290 回答
14

UIPageViewController 点仅在您实现以下方法时显示:

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

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

于 2015-02-27T16:50:24.850 回答
7

我正在添加 swift 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()
    }
}

这是 Swift 4 兼容的解决方案,嵌入在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
    }
}
于 2016-05-10T08:03:41.067 回答
1

斯威夫特版本:)。为 UIPageViewController 子类中的以下实现返回零。func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 }

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 }
于 2015-11-03T12:53:09.897 回答
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;
}

现在底部空间的间隙被移除,并且没有显示页面控件:)

于 2016-04-06T14:16:39.340 回答