UIPageControl – 如何使背景透明?

我正在使用UIPageControl并试图使背景透明。

 UIPageControl *pageControl = [UIPageControl appearance]; pageControl.pageIndicatorTintColor = [UIColor lightGrayColor]; pageControl.currentPageIndicatorTintColor = [UIColor blackColor]; pageControl.backgroundColor = [UIColor blackColor]; 

有什么build议么?

试着

 pageControl.backgroundColor = [UIColor clearColor]; 

没有运气。

============

好吧,正如@ powerj1984@daniellarsson所提到的, UIPageControl在位置和背景颜色方面似乎不可改变

所以我决定把这个移动到UIViewController并创build一个UIPageControl

 @property (weak, nonatomic) IBOutlet UIPageControl *pageControl; 

然后将UIPageViewController作为viewDidLoad带到我的UIPageViewController顶部

 self.pageControl.numberOfPages = self.pageTitles.count; [self.view addSubview:_pageControl.viewForBaselineLayout]; 

然后我在viewControllerBeforeViewControllerviewControllerAfterViewController更新了UIPageControl的索引

 NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex; self.pageControl.currentPage = index; 

好吧,正如@ powerj1984和@daniellarsson所提到的,UIPageControl在位置和背景颜色方面似乎不可改变。

所以我决定把这个移动到UIViewController并创build一个UIPageControl和

 @property (weak, nonatomic) IBOutlet UIPageControl *pageControl; 

然后将其作为viewDidLoad带到我的UIPageViewController的顶部

 self.pageControl.numberOfPages = self.pageTitles.count; [self.view addSubview:_pageControl.viewForBaselineLayout]; 

然后我在viewControllerBeforeViewController和viewControllerAfterViewController中更新了UIPageControl的索引

 NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex; self.pageControl.currentPage = index; 
 pageControl.backgroundColor = [UIColor clearColor]; 

正在工作,但! 比你必须设置UIPageViewControllerbackgroundColor UIPageViewController也在[UIColor clearColor]和比! 你会看到容器视图的背景颜色。

 - (void)initPageViewController { _pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; UIImageView *imgView= [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; imgView.image = [UIImage imageNamed:@"NiceBGImage"]; [self.view addSubview:imgView]; self.view.backgroundColor = [UIColor clearColor]; _pageController.view.frame = ({ CGRect frame = [[UIScreen mainScreen] bounds]; frame; }); _pageController.delegate = self; _pageController.dataSource = self; _pageController.view.backgroundColor = [UIColor clearColor]; NSArray *controllers = @[_controllers[0]]; [self.pageController setViewControllers:controllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; UIPageControl *pageControl = [UIPageControl appearance]; pageControl.pageIndicatorTintColor = [UIColor lightGrayColor]; pageControl.currentPageIndicatorTintColor = [UIColor whiteColor]; pageControl.backgroundColor = [UIColor clearColor]; pageControl = [UIPageControl appearanceWhenContainedIn:[_pageController class], nil]; [self addChildViewController:_pageController]; [[self view] addSubview:_pageController.view]; [self.pageController didMoveToParentViewController:self]; } 

页面控制默认是透明的。

检查这个示例代码:

 UIPageControl *pageControl = [[UIPageControl alloc] init]; pageControl.frame = CGRectMake(10,10,100,100); pageControl.numberOfPages = 8; pageControl.currentPage = 0; [self.view addSubview:pageControl]; [self.view bringSubviewToFront:pageControl]; [self.view setBackgroundColor:[UIColor blackColor]]; 

请在下面find更多的定制可能性

页面控件的外观

您可以通过设置下面描述的属性来自定义页面控件的外观。

在这里输入图像说明

要自定义应用程序中所有页面控件的外观 ,请使用外观代理 (例如[UIPageControl appearance])。 有关外观代理的更多信息, 请参见外观代理 。

色调

自定义页面控件外观的唯一方法是为表示每个页面的点设置自定义色调。 当前页面(currentPageIndicatorTintColor)字段会影响表示当前显示的页面的点的颜色,并且“色调颜色(pageIndicatorTintColor)”字段会影响表示每个其他页面的点的颜色。 当前页面点的默认颜色为白色,其他页面点的默认颜色为半透明灰色。

在这里输入图像说明

如果您希望自定义颜色是半透明的,则必须指定一个alpha值小于1.0的颜色。 这必须以编程方式完成,如下例所示:

 self.myPageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.5]; self.myPageControl.pageIndicatorTintColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.5]; 

在UIPageControl – Developer.Apple文档中查看更多细节

从Xcode 6.1.1和iOS 8.1.1开始,我知道将UIPageControl对象的背景颜色设置为清晰的颜色对我很有用。

 [[self pageControl] setBackgroundColor:[UIColor clearColor]]; 

我终于在Swift中find了这个问题的一个工作解决scheme。 你可以find原始的代码并在这个链接中回答。

它要求你重写viewDidLayoutSubviews()函数,把页面控件放到视图的前面。

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let subViews: NSArray = view.subviews var scrollView: UIScrollView? = nil var pageControl: UIPageControl? = nil for view in subViews { if view.isKindOfClass(UIScrollView) { scrollView = view as? UIScrollView } else if view.isKindOfClass(UIPageControl) { pageControl = view as? UIPageControl } } if (scrollView != nil && pageControl != nil) { scrollView?.frame = view.bounds view.bringSubviewToFront(pageControl!) } } 

如果将UIPageControl的背景颜色设置为与VC 背景颜色相同的背景图像 ,它可以工作:

 [UIPageControl appearance].backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pageControllerBackground"]]; 

这里是阿里扎的延伸的答案

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let subViews: NSArray = view.subviews var scrollView: UIScrollView? = nil var pageControl: UIPageControl? = nil for view in subViews { if view.isKindOfClass(UIScrollView) { scrollView = view as? UIScrollView } else if view.isKindOfClass(UIPageControl) { pageControl = view as? UIPageControl pageControl?.pageIndicatorTintColor = UIColor.lightGrayColor() pageControl?.currentPageIndicatorTintColor = UIColor.blackColor() pageControl?.backgroundColor = UIColor.clearColor() } } if (scrollView != nil && pageControl != nil) { scrollView?.frame = view.bounds view.bringSubviewToFront(pageControl!) } } 

尝试这个:

 pageControl = [UIPageControl appearance]; //for change the bullets color pageControl.pageIndicatorTintColor = [UIColor colorWithRed:(129.0/255) green:(129.0/255) blue:(129.0/255) alpha:1.0]; pageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:(06.0/255) green:(122.0/255) blue:(145.0/255) alpha:1.0]; pageControl.backgroundColor = [UIColor clearColor];