6

Sto usando UIPageViewController per mostrare le immagini a schermo intero. Il problema è che le immagini non vengono visualizzate a schermo intero. Invece c'è una fessura nella parte inferiore tra l'immagine ei punti della vista di controllo della pagina e in alto. Ho un UIViewController che viene aggiunto a UIPageController come sub view/child e che ViewController ha le immagini mostrate usando ImageView. Sto provando a farlo in modo rapido/storyboard.rendere l'immagine a schermo intero in visualizzazione controller/visualizzazione vista controller (swift)

Ho modificato la barra superiore e l'opzione barra inferiore su "nessuno" nello storyboard, ma non ha funzionato.

Anteprima immagine:

enter image description here

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

Il 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 Delegato:

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

controllo questo fuori http://stackoverflow.com/questions/21045630/how-to-put-the-uipagecontrol-element-on-top -delle-pagine-scorrevoli-dentro-un-uipage –

+0

Questo mi è stato di aiuto [UIPageViewController UIImage non mostra a schermo intero] (http://stackoverflow.com/questions/28732972/uipageviewcontroller-uiimage-not-showing- schermo intero) –

risposta

2

UIPageViewController dispone di una vista in cui verranno visualizzate le pagine. Quelle pagine non possono essere più grandi di quella vista - in altre parole, sono all'interno del controller di visualizzazione di pagina.

La vista del tuo UIPageViewController è più piccola dello schermo - consente spazio nella parte inferiore per il controllo della pagina e il pulsante, e nella parte superiore della barra di navigazione. Tu stesso stanno causando questo è vero:

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

Hai permesso 30 punti gap in gap superiore e 30 punti in fondo. Pertanto, le immagini visualizzate non possono mai essere più grandi di così. Non possono mai essere "a schermo intero".

+0

Non puoi fare qualcosa del genere? https://s-media-cache-ak0.pinimg.com/736x/a3/84/cd/a384cd83b85c64a175503c3ee9baa5d3.jpg –

+0

Ovviamente sì, è possibile. Ma non è quello che hai chiesto. Mi hai chiesto perché tu non lo stavi facendo. E ti ho detto perché. - Aggiunta un po 'più di informazioni alla mia risposta, che mostra come tu stesso stai rendendo le immagini più piccole rispetto allo schermo. – matt

+0

Inoltre, anche se sto solo indovinando, direi che l'interfaccia Telegram che hai mostrato non è un UIPageViewController - probabilmente è solo un UIScrollView orizzontale di paging. Con solo 6 "pagine" che sono solo immagini, è così che lo farei comunque. – matt

0

Swift 3 versione, quando sottoclasse 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!) 
    } 
} 
Problemi correlati