UIPageViewController 中缺少页面指示

Posted

技术标签:

【中文标题】UIPageViewController 中缺少页面指示【英文标题】:Page indication is missing in UIPageViewController 【发布时间】:2014-01-23 00:16:45 【问题描述】:

我想利用UIPageViewController 对我的数据源进行分页。 基本上它可以工作,但是我看不到这些点来指示我在哪个页面上。

以前有人问过这个问题,我完全按照the answer 的建议做了。但是我的屏幕底部仍然没有任何点。

基本上我使用的是UIPageViewControllerTransitionStyleScroll,导航方向是UIPageViewControllerNavigationOrientationHorizontal

我在 GitHub 上创建了一个sample project 来演示这个问题。

如果有人能如此友善并提供帮助。

【问题讨论】:

【参考方案1】:

解决此问题的另一种方法是customize the page control's tint colors:

UIPageControl *pageControlAppearance = [UIPageControl appearanceWhenContainedIn:[UIPageViewController class], nil];
pageControlAppearance.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControlAppearance.currentPageIndicatorTintColor = [UIColor darkGrayColor];

【讨论】:

【参考方案2】:

更新: 请参阅下面@Senseful 的答案。它比这个更受欢迎。

原答案: 我检查了您的项目,您看不到UIPageController(点)的原因是它的默认颜色是白色,而UIPageViewController 的视图的超级视图是白色的。要解决此问题,您可以更改背景颜色或更改 UIPageController 的颜色。

要将背景颜色更改为非白色,请在-viewDidLoad: 中的FTAdviceViewController.m 中设置包含UIPageViewController 视图的视图的背景颜色。

-(void)viewDidLoad

    [super viewDidLoad];
    self.view.backgroundColor = [UIColor redColor];
    ...

要更改点的颜色,请在创建 UIPageViewController 后获取 UIPageViewControllerUIPageControl 子视图。然后,您可以更改其 pageIndicatorTintColorcurrentPageIndicatorTintColorbackgroundColor 属性。

- (void)viewDidLoad

    ...
    // after creating the UIPageViewController
    for (UIView *subview in self.pageController.view.subviews) 
        if ([subview isKindOfClass:[UIPageControl class]]) 
            UIPageControl *pageControl = (UIPageControl *)subview;
            pageControl.pageIndicatorTintColor = [UIColor yellowColor];
            pageControl.currentPageIndicatorTintColor = [UIColor greenColor];
            pageControl.backgroundColor = [UIColor blueColor];
        
    

【讨论】:

谢谢约瑟夫。我没想到它是白色的。考虑到 ios 7 默认是白色和蓝色调,他们为 UIPageControl 选择白色真是太疯狂了。 我的荣幸 :) 当我第一次遇到它时,我也感到困惑。 谢谢,对我也有帮助。 天哪,我感觉有多笨?谢谢你,它为我节省了很多时间。【参考方案3】:

我用我在自己的 Swift 4 项目中使用的这个块回答了之前的 SO 问题。

    override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
    for view in self.view.subviews
        if view is UIPageControl
            (view as! UIPageControl).currentPageIndicatorTintColor = .yellow
            
        
    

您在此块中有 UIPageControl,因此您可以随意自定义它。

【讨论】:

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

swift+UIPageViewController 纯代码实现引导页

如何设置 UIPageViewController(分页类型)手势委托

UIPageViewController制作小说翻页效果

UIPageViewController:如何添加非分页工具栏或其他“覆盖”元素?

UIPageViewController:每页更改页面指示器/页面控件的颜色

在两页模式下如何实现可缩放的 UIPageViewController?