UIPageViewController页面控制背景颜色

use*_*695 43 objective-c ios uipageviewcontroller

我在我的应用程序中使用UIPageViewController,它工作正常.但是,它自动添加的页面控件有一个黑色背景,隐藏了当前视图控制器的底部材质(见下图).是否可以调用UIPageViewController的页面控件并更改它的颜色?我希望页面控件显示在视图控制器上(例如,路径应用程序的演练),比如设置颜色而不是黑色来清除.

在此输入图像描述

Yas*_* T. 84

您可以使用appearance更改UIPageControl的颜色,否则无法访问它.尝试在AppDelegate的didFinishLaunchingWithOptions功能中执行此操作,如下所示.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIPageControl *pageControl = [UIPageControl appearance];
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
    pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
    pageControl.backgroundColor = [UIColor blueColor];

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

要仅将样式应用于特定视图控制器,您可以使用appearanceWhenContainedIn以下内容:

UIPageControl *pageControl = [UIPageControl appearanceWhenContainedIn:[MyViewController class], nil];
Run Code Online (Sandbox Code Playgroud)

只有UIPageControl包含在其中的对象MyViewController才能获得这种风格.

编辑: 黑色背景围绕UIPageControl在屏幕的底部是由于你的背景颜色UIPageViewController不是UIPageControl.您可以更改此颜色,如下所示:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blueColor]; //Set it to whatever you like
}
Run Code Online (Sandbox Code Playgroud)

  • 这是因为您的`UIPageControllerView`视图没有颜色,基本上显示为黑色.将它添加到`UIPageViewController`的`viewDidLoad:`函数中,将黑色变为红色.`self.view.backgroundColor = [UIColor redColor];` (3认同)
  • 谢谢你,但它实际上不能使它透明,以便我可以显示它下面的东西([uicolor clearcolor]).但是,这是一个有价值的信息.我有一个问题,希望你能给我更多信息.它是如何知道我的目标是哪个pageControl?外观如何运作?非常感谢! (2认同)

小智 27

针对Swift 3进行了更新:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    for view in self.view.subviews {
        if view is UIScrollView {
            view.frame = UIScreen.main.bounds
        } else if view is UIPageControl {
            view.backgroundColor = UIColor.clear
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Swift 2示例适用于任何需要它的人.把它放在你的UIPageController子类中.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    for view in self.view.subviews {
        if view is UIScrollView {
            view.frame = UIScreen.mainScreen().bounds
        } else if view is UIPageControl {
            view.backgroundColor = UIColor.clearColor()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Bra*_*ang 9

在UIPageViewController中添加以下代码.

- (void)viewDidLoad {
    [super viewDidLoad];
    [[UIPageControl appearance] setPageIndicatorTintColor: [UIColor grayColor]];
    [[UIPageControl appearance] setCurrentPageIndicatorTintColor: [UIColor whiteColor]];
    [[UIPageControl appearance] setBackgroundColor: [UIColor darkGrayColor]];
}
Run Code Online (Sandbox Code Playgroud)


ork*_*ein 8

只需子类化UIPageViewController并添加以下代码:

- (void)viewDidLayoutSubviews {
  [super viewDidLayoutSubviews];
  for (UIView *view in self.view.subviews) {
    if ([view isKindOfClass:[NSClassFromString(@"_UIQueuingScrollView") class]]) {
      CGRect frame = view.frame;
      frame.size.height = view.superview.frame.size.height;
      view.frame = frame;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这将扩展内部滚动视图框架.

  • 不得不添加[self.view sendSubviewToBack:view]; 在if语句中,它在这里正常工作. (3认同)
  • 这不使用私有API吗? (2认同)

Raf*_*sun 5

这是Yas-T答案的Swift 2 + 版本

//In AppDelegate
let pageControl = UIPageControl.appearance()
pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
pageControl.currentPageIndicatorTintColor = UIColor.blackColor()
pageControl.backgroundColor = UIColor.blueColor()

//Or in your ViewController (Only available on IOS 9.0)
if #available(iOS 9.0, *) {
   let pageControl = UIPageControl.appearanceWhenContainedInInstancesOfClasses([ViewController.self])
   pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
   pageControl.currentPageIndicatorTintColor = UIColor.darkGrayColor()
}
Run Code Online (Sandbox Code Playgroud)