UIPageViewController UIImage不显示全屏

时间:2015-02-26 01:32:05

标签: ios uiimage fullscreen uipageviewcontroller tabview

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

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

As you can see, the image stops at the bottom where the dots begin. Where as I want it to go all the way down to the bottom. So the area with the dots is transparent.

2 个答案:

答案 0 :(得分:6)

该页面上有一个非常简单的解决方案:http://tunesoftware.com/?p=3363

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

  1. 通过将其框架设置为页面控制器视图的边界来增加 UIPageViewController UIScrollView (内容)的界限
  2. UIPageControl 元素(点)移动到视图层次结构的前面,使其位于内容前面
  3. 这是他提供的代码(如果链接被破坏):

    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
    • 如果您在代码中设置页面控制器,那么只需确保为其定义的类继承 TSPageViewController

    干杯, 乔

答案 1 :(得分:1)

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

(1)扩展UIPageViewController的BasePageViewController.h

#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