我正在使用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];
这里NewsItemViewController是UIViewController,显示图像和一些文本,MainViewController在MainViewController中实现UIPageViewControllerDataSource协议和必要的方法。
我相信必须有一种方法可以全屏显示。
***如果重要的话,MainViewController也是故事板的一部分。
答案 0 :(得分:38)
最后自己解决了这个问题我只是从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);
答案 1 :(得分:21)
好奇。 docs说:
如果“支持页面指示符”中的两个方法都是 实现和页面视图控制器的过渡样式是 UIPageViewControllerTransitionStyleScroll,页面指示符是 可见。
这两种方法是:
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
}
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {
}
您是否实施了这两种数据源方法?如果是这样,也许如果你删除它们,你不必手动删除页面控件(点)?快速测试将是改变
UIPageViewControllerTransitionStyleScroll
到
UIPageViewControllerTransitionStylePageCurl
并查看页面控制指示符点是否消失。 (当然,在评论出你的隐藏方法之后。)
答案 2 :(得分:14)
只有在实现以下方法后才会显示UIPageViewController点:
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController;
检查你的代码。并且在此方法中返回零将隐藏点(UIPageControl)
答案 3 :(得分:4)
我正在添加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()
}
}
这是嵌入在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
}
}
答案 4 :(得分:1)
Swift版:)。在UIPageViewController子类中返回以下实现的零。 func presentationCountForPageViewController(pageViewController:UIPageViewController) - &gt; Int {return 0}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 }
答案 5 :(得分: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;
}
现在底部空间的间隙被移除,并且没有显示页面控制:)
答案 6 :(得分:0)
将下面的代码粘贴到您的UIPageViewController中:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let pageScrollView = view.subviews.first {
pageScrollView.frame = view.bounds
}
}