2015-02-26 1 views
4

Je crée une application qui est un contrôleur d'onglet. Pour le premier onglet, j'ai un UIPageViewController qui fait défiler les images. Tout fonctionne correctement, sauf que l'image ne s'affiche pas en plein écran. J'ai des contraintes configurées pour la vue d'image pour couvrir le contrôleur entier de vue mais quand elle est chargée dans la vue de page, elle ne couvre pas tout le chemin vers le bas. L'image est coupée par les indicateurs de points de défilement, puis elle est simplement blanche.UIPage UIPageViewController UIImage ne s'affiche pas en mode plein écran

Je suis sûr que c'est simple, mais est-ce qu'il y a une manière que les images couvriront l'écran entier comme j'ai les contraintes établies pour faire?

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.

+0

Montrez-nous une capture d'écran de ce que vous sont après et expliquent alors comment il devrait être différent. –

+0

Dans l'image, je veux que l'image descende tout en bas. Au lieu de cela, il s'arrête là où les points commencent. Je veux que la zone de point soit transparente et que l'image remplisse tout l'écran @DougWatkins – Adam

Répondre

6

Il y a une solution assez simple pour ce problème sur cette page: http://tunesoftware.com/?p=3363

Il est fait en redéfinissant la méthode viewDidLayoutSubviews de UIPageViewController et de faire essentiellement deux choses:

  1. Augmentation des limites de UIScrollView (le contenu) dans le UIPageViewController en définissant son cadre des limites de l'avis du contrôleur de la page
  2. Déplacement du UIPageControl élément (les points) à l'avant de la hiérarchie d'affichage afin qu'il soit en face de la teneur

Voici le code qu'il fournit (au cas où le lien est cassé):

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!) 
     } 
    } 
} 

Tout ce que vous devez faire après cela, est:

  • Si vous réglez votre contrôleur de page dans le story-board, alors allez simplement dans le volet inspecteur d'identité et changer sa classe à TSPageViewController
  • Si vous réglez votre contrôleur de la page dans le code, alors assurez-vous juste la classe que vous avez défini car il hérite de la TSPageViewController classe

Cheers, Joe

+0

Si je crée le contrôle de page dans AppDelegate.swift par var pageControl = UIPageControl.appearance().Comment puis-je m'assurer qu'il hérite de cette classe? – user2722667

1

Voici la version Objective-C. Créer une nouvelle classe (2 fichiers):

(1) BasePageViewController.h extension UIPageViewController

#import <UIKit/UIKit.h> 

@interface BasePageViewController : UIPageViewController 

@end 

(2) BasePageViewController.m contenant viewDidLayoutSubviews override

#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