Как удалить нижний зазор 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 является частью раскадровки, если это имеет значение.
Ответы
Ответ 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
}
}