2013-11-12 3 views
10

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

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

+0

вы вместо этого следует использовать UIPageControl и UIScrollView, тогда у вас есть подробный контроль. – Woodstock

+0

Покажите нам некоторый код относительно того, как вы настраиваете контроллер просмотра страницы. – bilobatum

+0

@JohnWoods должен быть способом, поскольку UIPageViewController должен был заменить UIPageControl и ScrollView plus. Мне нужна гибкость при проектировании представления в редакторе xib, который я не получу в упомянутом вами подходе. –

ответ

38

Наконец-то я получил решение, я просто спрячу элемент управления страницы с 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); 
+0

Спасибо за приятное решение, спасло мне массу времени! – Julius

+1

Можете ли вы сделать контрольный индикатор над самим изображением, а не удалять его? Я хочу, потому что у пользователя нет указаний, которые он может пронести, удалив индикатор. –

+1

@ NunoGonçalves, используя вышеприведенный код, вы получаете доступ к UIPageControl, вы можете сделать свой цвет фона понятным и достичь его, в основном вы можете настроить индикатор, как только получите доступ к нему, что выше обуви, как это сделать. –

19

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

Если оба метода в «Поддерживая индикатор страницы» являются реализованы и стиль перехода странице просмотра контроллера является UIPageViewControllerTransitionStyleScroll, индикатор страницы виден.

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

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

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

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

UIPageViewControllerTransitionStyleScroll 

к

UIPageViewControllerTransitionStylePageCurl 

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

+1

согласен, но мне нужны эти методы, я думаю, они необходимы для предоставления необходимых данных просмотра при прокрутке. –

+2

Вы были правы, индикатор элемента страницы исчезает, если вы переходите к стилю перехода PageCurl. – Julius

+4

Извлечение двух методов выше, также удалены точки и зазор. Успех! –

14

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

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

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

+0

Я хотел удалить черную полоску, если вы внимательно прочитали, вышеупомянутый метод просто удалит точки, а не пробел. –

+0

, это может быть какая-то другая проблема с кодом. он полностью удаляет полоску. –

+0

Отлично, именно то, что мне нужно. – Drew

1

Swift version :). Return Zero для реализации ниже внутри подкласса UIPageViewController. функ presentationCountForPageViewController (pageViewController: UIPageViewController) -> Int {возврат 0}

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

Установите контроллер пейджера, как так

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

Теперь зазор в нижнем пространстве снят и не отображается контроль страницы :)

2

Я добавляю для быстрых 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 
    } 
} 
0

коде Paste ниже в ваш UIPageViewController:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    if let pageScrollView = view.subviews.first { 
     pageScrollView.frame = view.bounds 
    } 
} 
Смежные вопросы