6

Ich verwende UIPageViewController, um Bilder im Vollbildmodus anzuzeigen. Problem ist, dass die Bilder nicht den ganzen Bildschirm anzeigen. Stattdessen befindet sich unten zwischen dem Bild und den Seitenkontrollpunkten und oben auf der Seite eine Lücke. Ich habe einen UIViewController, der UIPageController als Unteransicht/Kind hinzugefügt wird und dass ViewController die Bilder mit ImageView gezeigt hat. Ich versuche dies in swift/Storyboard zu tun.machen Bildansicht Vollbildansicht Controller/Seitenansicht Controller (Swift)

Ich ändere die obere Leiste und die untere Leiste Option auf "keine" im Storyboard, aber es hat nicht funktioniert.

Bildvorschau:

enter image description here

Die ChildViewControllerCode:

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. 
} 

Die mainViewControllerCode:

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. 
} 

App Delegierter:

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 
} 
+0

check this out http://stackoverflow.com/questions/21045630/how-to-put-the-uipagecontrol-element-on-top -of-the-sliding-pages-in-a-uipage –

+0

Dieser war hilfreich für mich [UIPageViewController UIIage zeigt nicht den ganzen Bildschirm] (http://stackoverflow.com/questions/28732972/uipageviewcontroller-uiimage-not-showing- Vollbild) –

Antwort

2

Der UIPageViewController hat eine Ansicht, in der seine Seiten angezeigt werden. Diese Seiten können nicht größer sein als diese Ansicht - mit anderen Worten, sie sind innerhalb der Seitenaufruf-Controller.

Die Ansicht Ihres UIPageViewControllers ist kleiner als der Bildschirm - er ermöglicht den unteren Bereich für die Seitensteuerung und die Schaltfläche und oben für die Navigationsleiste. Sie sind selbst verursacht dies um wahr zu sein:

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

Sie haben 30 Punkte Lücke an der Spitze und 30 Punkte Spalt am Boden erlaubt. Daher können die angezeigten Bilder niemals größer sein. Sie können niemals "Vollbild" sein.

+0

Kann man sowas nicht machen? https://s-media-cache-ak0.pinimg.com/736x/a3/84/cd/a384cd83b85c64a175503c3ee9baa5d3.jpg –

+0

Offensichtlich ja, können Sie. Aber das hast du nicht gefragt. Du hast gefragt, warum du das nicht tust. Und ich habe dir gesagt warum. - Ein wenig mehr Informationen zu meiner Antwort hinzugefügt, die Ihnen zeigt, wie _you yourself_ die Bilderansichten kleiner als der Bildschirm macht. – matt

+0

Auch wenn ich nur rate, würde ich sagen, dass die Telegramm-Schnittstelle, die Sie zeigten, kein UIPageViewController ist - es ist wahrscheinlich nur ein horizontaler Paging-UIScrollView. Mit nur 6 "Seiten", die nur Bilder sind, würde ich es sowieso machen. – matt

0

Swift 3 Version, wenn Subklassen 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!) 
    } 
} 
Verwandte Themen