ios - medium - uipageviewcontroller objective c



Контроллер детского просмотра сдвигается вниз (2)

Кажется, я нашел исправление для него, это было связано с ограничениями автоматической компоновки, которые я установил. Контроллер моего дочернего представления содержит изображение, которое полностью заполняет его. Поэтому я даю следующие ограничения для представления изображения:

  1. Центр горизонтально в контейнере
  2. Центр вертикально в контейнере
  3. Равные ширины (к виду контейнера)
  4. Равные высоты (к виду контейнера)

Это останавливает проблему смещения / мерцания.

https://src-bin.com

У меня есть TutorialsViewController с программным обеспечением для просмотра PageViewController:

- (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]; 
}

И я добавляю TutorialsContentViewController к PageViewController, используя методы делегата:

- (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;
}

Теперь, когда я запускаю это в симуляторе, я вижу, что все работает нормально, так что следующий контроллер дочерних представлений оказывается выше строки состояния, и он сдвигается вниз по мере прокрутки.

Я попробовал self.automaticallyAdjustsScrollViewInsets = false в контроллере родительского контроля, но дочерний вид все еще сдвигается вниз. Контроллер дочернего представления имеет ImageView, который имеет начальные, конечные, верхние и нижние ограничения, установленные на 0 изначально (это вызывает сдвиг).

Когда я центрирую изображение по горизонтали и вертикали и придаю ему фиксированную высоту и ширину, он работает отлично. Но я хочу, чтобы изображение полностью заполнило контроллер дочернего представления.

Как решить эту проблему? Пожалуйста помоги.

Благодарю.






uipageviewcontroller