2015-04-10 11 views
7

Mam TutorialsViewController że ma PageViewController dodany programowo jako:Child View Controller przesuwa się w dół

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    // Create page view controller 
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TutorialsPageViewController"]; 
    self.pageViewController.dataSource = self; 

    TutorialsContentViewController *startingViewController = [self viewControllerAtIndex:0]; 

    NSArray *viewControllers = @[startingViewController]; 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; 

    [self addChildViewController:self.pageViewController]; 
    [self.view addSubview:self.pageViewController.view]; 
    [self.pageViewController didMoveToParentViewController:self]; 
} 

I dodam TutorialsContentViewController do PageViewController wykorzystaniem metod Delegat:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { 
    NSUInteger index = ((TutorialsContentViewController*) viewController).pageIndex; 

    if ((index == 0) || (index == NSNotFound)) { 
     return nil; 
    } 

    index--; 
    return [self viewControllerAtIndex:index]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 
    NSUInteger index = ((TutorialsContentViewController*) viewController).pageIndex; 

    if (index == NSNotFound) { 
     return nil; 
    } 

    index++; 
    if (index == [self.tutorialsArray count]) { 
     return nil; 
    } 
    return [self viewControllerAtIndex:index]; 
} 

- (TutorialsContentViewController *)viewControllerAtIndex:(NSUInteger)index { 
    if (([self.tutorialsArray count] == 0) || (index >= [self.tutorialsArray count])) { 
     return nil; 
    } 

    // Create a new view controller and pass suitable data. 
    TutorialsContentViewController *tutorialsContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"TutorialsContentViewController"]; 
    tutorialsContentViewController.imageName = [self.tutorialsArray objectAtIndex:index]; 
    tutorialsContentViewController.pageIndex = index; 
    return tutorialsContentViewController; 
} 

Teraz gdy uruchamiam w symulatorze widzę, że wszystko działa dobrze, tylko że następny kontroler widoku dziecka znajduje się nad paskiem stanu i przesuwa się w dół podczas przewijania.

Próbowałem self.automaticallyAdjustsScrollViewInsets = false w kontroler widoku rodzica, ale widok podrzędny nadal się przesuwa. Sterownik widoku podrzędnego ma ImageView, który początkowo ma ustawione początkowe, końcowe, górne i dolne ograniczenie (powoduje to przesunięcie).

Po wyśrodkowaniu obrazu w poziomie i w pionie oraz nadaniu mu stałej wysokości i szerokości działa to dobrze. Ale chcę, aby obraz całkowicie wypełnił kontrolkę widoku podrzędnego.

Jak rozwiązać ten problem z przesunięciem widoku? Proszę pomóż.

Dzięki.

Odpowiedz

4

Wygląda na to, że znalazłem poprawkę, było związane z ograniczeniami układu automatycznego, które ustawiłem. Mój kontroler widoku podrzędnego zawiera widok obrazu, który całkowicie go wypełnia. Więc daję następujące ograniczenia do widoku obrazu:

  1. Centrum poziomo w pojemniku
  2. Centrum pionowo w zbiorniku
  3. Równe Szerokości (do widoku pojemnika)
  4. Równe Heights (do widzenia pojemnika)

Spowoduje to zatrzymanie problemu z przesuwaniem/migotaniem widoku.

Powiązane problemy