隐藏来自UIPageViewController的点
我想做一个非常简单的事情。 只要删除所有的点,并在UIPageViewController底部的酒吧。
这是设置:我有一个自定义视图控制器,它具有UIPageViewController * pageController我显示它是这样的:
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; self.pageController.dataSource = self; [[self.pageController view] setFrame:[self.view bounds]]; BSItemPageViewController *initialViewController = [self viewControllerAtIndex:selectedIndex]; 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];
任何想法如何删除点?
页面控件只在数据源实现这些方法时才显示:
presentationCountForPageViewController: presentationIndexForPageViewController:
只需删除您的这些实现,页面控件将不会显示。 从数据源文档 :
如果“支持页面指示器”中的两种方法均已实现,并且页面视图控制器的过渡样式为UIPageViewControllerTransitionStyleScroll,则页面指示器可见。
在我的情况下,我有多个UIPageViewController(创build自 – [UITableView didSelectRowAtIndexPath]),其中一些只包含1页。 而不是使用不同的控制器为不同的UITableView行,我实现了UIPageViewController委托方法如下:
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController { return ([self numberOfPages] == 1 ? 0 : [self numberOfPages]); }
如果只有1页似乎使UIPageViewController不显示点,则返回0。 这是一个kludge,但它似乎工作(iOS SDK 7.0)。
我想一个“更清洁”的方法是在运行时为那些只有1页的UIPageController移除方法,但这会涉及一些奇特的objC运行时操作。
对这种方法的评论?
如果要在运行时dynamic隐藏这些点,则从presentationIndexForPageViewController委托中返回-1。
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return yourPageVCs.count } func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return yourPageVCs.count > 1 ? 0 : -1 }
在这种情况下,如果只有1(单面)页面,点将被隐藏。
上面的修补程序在一开始就工作正常,页数固定。
我尝试了不同的方法来解决页面dynamic增加或减less的问题。
所以我用下面的方法手动隐藏组件本身。
func togglePageControl(pageCount: Int, threshold: Int = 1) { var hidden = true if pageCount > threshold { hidden = false } for subView in self.view.subviews { if subView is UIScrollView { subView.frame = self.view.bounds } else if subView is UIPageControl { subView.isHidden = hidden } } }
这应该被称为
public func presentationCount(for pageViewController: UIPageViewController) -> Int { togglePageControl(pageCount: pages.count) // or togglePageControl(pageCount: pages.count, threshold: 5) return pages.count }