Как удалить нижний зазор UIPageViewController - программирование
Подтвердить что ты не робот

Как удалить нижний зазор UIPageViewController

Я использую UIPageViewController для отображения полноэкранного изображения, UIViewController, который добавлен в UIPageController, как дочерний объект/дочерний объект, имеет изображения, показываемые с помощью ImageView. Проблема заключается в том, что изображения arent появляются в полноэкранном режиме, вместо этого в нижней части отображаются объекты просмотра pagecontrol, и это пространство полностью теряется. Проверьте прикрепленное изображение.

enter image description here

Вот код

self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

self.pageController.dataSource = self;
[[self.pageController view] setFrame:[[self view] bounds]];

NewsItemViewController *initialViewController = [self viewControllerAtIndex:0];

NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];

[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];

Здесь NewsItemViewController - это UIViewController, показывающий изображения и некоторый текст, а MainViewController реализует протокол UIPageViewControllerDataSource и необходимые методы в MainViewController.

Я считаю, что должен быть способ показать вещи в полноэкранном режиме.

*** Также MainViewController является частью раскадровки, если это имеет значение.

4b9b3361

Ответ 1

Наконец, я получил решение, я просто спрячу элемент управления страницы с UIViewPageController, а затем расширил размер UIPageViewController, чтобы скрыть пробел, оставшийся из-за отсутствия контроля над страницами.

 NSArray *subviews = self.pageController.view.subviews;
UIPageControl *thisControl = nil;
for (int i=0; i<[subviews count]; i++) {
    if ([[subviews objectAtIndex:i] isKindOfClass:[UIPageControl class]]) {
        thisControl = (UIPageControl *)[subviews objectAtIndex:i];
    }
}

thisControl.hidden = true;
self.pageController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height+40);

Ответ 2

Любопытный. docs говорят:

Если оба метода в разделе "Поддержка индикатора страницы" реализован, и стиль перехода к контроллеру страницы UIPageViewControllerTransitionStyleScroll, индикатор страницы видимый.

Эти два метода:

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController { 
}

Используете ли вы эти два метода источника данных? Если это так, возможно, если вы их удалите, вам не придется вручную удалять элемент управления страницы (точки)? Быстрый тест состоял бы в том, чтобы изменить

UIPageViewControllerTransitionStyleScroll

к

UIPageViewControllerTransitionStylePageCurl

и посмотрите, исчезли ли контрольные точки страницы. (Разумеется, после комментирования вашего метода скрыть).

Ответ 3

Точки UIPageViewController отображаются только после того, как вы выполнили следующий метод:

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController;

проверьте код. а также возврат нуля в этом методе скроет точки (UIPageControl)

Ответ 4

Я добавляю для быстрого кода, совместимого с 2.2

for view in self.view.subviews {
    if view.isKindOfClass(UIScrollView) {
        view.frame = UIScreen.mainScreen().bounds
    } else if view.isKindOfClass(UIPageControl) {
        view.backgroundColor = UIColor.clearColor()
    }
}

Это совместимое с Swift 4 решение, встроенное в viewDidLayoutSubviews

for view in self.view.subviews {
    if view.isKind(of:UIScrollView.self) {
        view.frame = UIScreen.main.bounds
    } else if view.isKind(of:UIPageControl.self) {
        view.backgroundColor = UIColor.clear
    }
}

Ответ 5

Быстрая версия:). Return Zero для реализации ниже внутри подкласса UIPageViewController.   func presentationCountForPageViewController (pageViewController: UIPageViewController) → Int {return 0}

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 }

Ответ 6

Установите свой пейджер-контроллер таким образом

self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageController.dataSource = self;
[[self.pageController view] setFrame:[[self view] bounds]];

И реализовать, этот метод должен возвращать любое значение больше 1

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {
    // The selected item reflected in the page indicator.
    return 2;
}

Теперь пробел в нижнем пространстве удаляется, и ни один элемент управления страницы не отображается:)

Ответ 7

Вставьте код ниже в свой UIPageViewController:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    if let pageScrollView = view.subviews.first {
        pageScrollView.frame = view.bounds
    }
}