从 UIPageViewController 中移除页面指示器

Posted

技术标签:

【中文标题】从 UIPageViewController 中移除页面指示器【英文标题】:Remove the page indicator from UIPageViewController 【发布时间】:2014-08-27 18:26:13 【问题描述】:

我在 ios 应用程序中使用页面视图控制器。 如何从这个控制器中删除点?

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.dontShowChecked = NO;
    self.imagesArray = @[  ..];

    self.textsArray = @[ ........
                        ];


    // Create page view controller
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WTPageController"];
    self.pageViewController.dataSource = self;

    WTDetailViewController *startingViewController = [self viewControllerAtIndex:0];
    NSArray *viewControllers = @[startingViewController];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    // Change the size of page view controller
    CGFloat delta = [[PSDeviceInfo sharedInstance] is_iPhone] ? 50. : 50;

    self.pageViewController.view.frame = CGRectMake(0, 40., self.view.frame.size.width, self.view.frame.size.height - delta);
    [self.view addSubview:_pageViewController.view];
    [self.pageViewController didMoveToParentViewController:self];

这些点似乎会自动添加并干扰该区域中的其他 UI 元素。如何完全删除它们?

【问题讨论】:

Hide dots from UIPageViewController的可能重复 【参考方案1】:

一旦您的 UIPageViewController 数据源实现以下方法,就会添加点:

presentationCountForPageViewController:
presentationIndexForPageViewController:

避免实现这些以摆脱 UIPageControl 点。

【讨论】:

【参考方案2】:

当页面可以动态增加或减少

所以我使用了下面的方法来手动隐藏组件本身。

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
 

【讨论】:

【参考方案3】:

只有在数据源实现这些方法时才会显示页面控件:

presentationCount:
presentationIndex:

【讨论】:

【参考方案4】:

只要你实现了presentationCount和presentationIndex的UIPageViewControllerDataSource函数,它就会自动出现,但在我的例子中,它们来自服务器,所以我不知道会有多少,我只想隐藏它们,如果它是一个。

因此,只需在presentationCount 上返回零,您就可以了。

【讨论】:

以上是关于从 UIPageViewController 中移除页面指示器的主要内容,如果未能解决你的问题,请参考以下文章

将删除滑动手势从 UIPageViewController 传递给 UITableView

IOS 如何从其子级访问 uipageviewcontroller?

如何将数据从 UIPageViewController 传递到它的“子视图”之一?

从 UIPageViewController 中删除之前添加的 viewController

从 Swift 3 中的 UIPageViewController 中删除黑边

从 UIPageViewController 模态显示 UINavigationController 会锁定 iOS 9