在视图 controller/page 视图控制器 (swift) 中全屏显示图像

make image view full screen in view controller/page view controller (swift)

我正在使用 UIPageViewController 全屏显示图像。问题是图像没有全屏显示。相反,图像和页面控件视图点之间的底部以及顶部有一个间隙。我有一个 UIViewController 作为子视图添加到 UIPageController / child 并且 ViewController 使用 ImageView 显示图像。我正在尝试在 swift/storyboard.

中执行此操作

我在情节提要中将顶部栏和底部栏选项更改为 "none",但没有用。

图片预览:

孩子ViewController代码:

class BoatContentViewController: UIViewController {

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!


var pageIndex: Int!
var titleText: String!
var imageFile: String!


override func viewDidLoad() {
    super.viewDidLoad()

    self.imageView.image = UIImage(named: self.imageFile)
    self.titleLabel.text = self.titleText


    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

主要ViewController代码:

class BoatViewController: UIViewController, UIPageViewControllerDataSource {
@IBOutlet weak var loginButton: UIButton!
@IBOutlet weak var skipButton: UIButton!

var pageViewController: UIPageViewController!
var pageTitles: NSArray!
var pageImages: NSArray!

override func viewDidLoad() {
    super.viewDidLoad()

    loginButton.backgroundColor = UIColor.clearColor()
    loginButton.layer.cornerRadius = 5
    loginButton.layer.borderWidth = 1
    loginButton.layer.borderColor = UIColor.purpleColor().CGColor


    skipButton.backgroundColor = UIColor.whiteColor()
    skipButton.layer.cornerRadius = 5
    skipButton.layer.borderWidth = 1
    skipButton.layer.borderColor = UIColor.whiteColor().CGColor


    self.pageTitles = NSArray(objects: "", "", "", "", "")
    self.pageImages = NSArray(objects: "onboarding1", "onboarding2", "onboarding3", "onboarding4", "onboarding5")
    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("BoatPageViewController") as! UIPageViewController
    self.pageViewController.dataSource = self
    var startVC = self.viewControllerAtIndex(0) as BoatContentViewController
    var viewControllers = NSArray(object: startVC)
    self.pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: true, completion: nil)
    self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.size.height - 60)
    self.addChildViewController(self.pageViewController)
    self.view.addSubview(self.pageViewController.view)
    self.pageViewController.didMoveToParentViewController(self)

    // Do any additional setup after loading the view.
}

func viewControllerAtIndex(index: Int) -> BoatContentViewController {

    if ((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) {

        return BoatContentViewController()

    }


    var vc: BoatContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("BoatContentViewController") as! BoatContentViewController

    vc.imageFile = self.pageImages[index] as! String

    vc.titleText = self.pageTitles[index]as! String

    vc.pageIndex = index

    return vc
}

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?

{

    var vc = viewController as! BoatContentViewController

    var index = vc.pageIndex as Int

    if (index == 0 || index == NSNotFound)

    {
        return nil

    }

    index--

    return self.viewControllerAtIndex(index)

}



func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

    var vc = viewController as! BoatContentViewController

    var index = vc.pageIndex as Int

    if (index == NSNotFound) {
        return nil
    }

    index++

    if (index == self.pageTitles.count) {
        return nil
    }

    return self.viewControllerAtIndex(index)

}

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
    return self.pageTitles.count
}


func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
    return 0
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

应用程序代表:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.



    var pageControl = UIPageControl.appearance()

    pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()

    pageControl.currentPageIndicatorTintColor = UIColor.blackColor()

    pageControl.backgroundColor = UIColor.clearColor()



    return true
}

UIPageViewController 有一个视图,它的页面将显示在其中。这些页面不能大于该视图 - 换句话说,它们页面视图控制器中。

您的 UIPageViewController 的视图比屏幕小 - 它在底部为页面控件和按钮留出空间,在顶部为导航栏留出空间。你自己使这成为现实:

self.pageViewController.view.frame = 
    CGRectMake(0, 30, self.view.frame.width, self.view.frame.size.height - 60)

您允许顶部有 30 分的差距,底部有 30 分的差距。因此,它显示的图像永远不会比那个大。他们永远不可能是 "full screen".

Swift 3 版本,子类化 UIPageViewController 时:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let subViews: NSArray = view.subviews as NSArray
    var scrollView: UIScrollView? = nil
    var pageControl: UIPageControl? = nil

    for view in subViews {
        if view is UIScrollView {
          scrollView = view as? UIScrollView
        } else if view is UIPageControl {
            pageControl = view as? UIPageControl
        }
    }

    if (scrollView != nil && pageControl != nil) {
        scrollView?.frame = view.bounds
        view.bringSubview(toFront: pageControl!)
    }
}