UIPageControl - 如何使背景透明?

Posted

技术标签:

【中文标题】UIPageControl - 如何使背景透明?【英文标题】:UIPageControl - How to make the background transparent? 【发布时间】:2014-01-08 21:57:10 【问题描述】:

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

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

有什么建议吗?

试过

pageControl.backgroundColor = [UIColor clearColor];

运气不好。

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

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

所以我决定把它移到 UIViewController 并创建一个 UIPageControl

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

然后把它放到我的UIPageViewController 顶部,就像viewDidLoad 一样

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

然后我更新了UIPageControlviewControllerBeforeViewControllerviewControllerAfterViewController中的索引

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

【问题讨论】:

除非在 ios 7 中更新,否则我不认为背景颜色是 UIPageControl 外观的选项,请参阅此答案:***.com/questions/9881088/uipagecontrol-uiappearance 现在是什么颜色的?我不认为你可以通过外观来编辑背景颜色,我会假设它默认是透明的? 默认情况下它是白色的,我通过presentationCountForPageViewController 和presentationIndexForPageViewController 添加了它。当我通过 Storyboard 添加为页面控件时,它是透明的。 你能看到这些点吗? @sselvan 我遇到了完全相同的问题,您能否详细说明如何克服此问题,您可以针对此事回答您自己的问题 【参考方案1】:

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

所以我决定把它移到 UIViewController 并创建一个 UIPageControl 和

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

然后将它带到我的 UIPageViewController 的顶部,就像在 viewDidLoad 中一样

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

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

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

【讨论】:

我也有同样的问题。我需要将页面控件的背景颜色更改为透明,并且需要显示 pageIndicator 点。 感谢您的解决方案!主要为我工作......现在的问题是当我向后滚动时(我只有 2 页),它不会更新 currentPage。这是因为它直到完成转换后才调用viewControllerBeforeViewController,所以索引再次为0,该方法将返回nil。 这个链接很有帮助samwize.com/2016/03/08/…【参考方案2】:
pageControl.backgroundColor = [UIColor clearColor];

正在工作,但是!!比你必须在[UIColor clearColor] 上设置UIPageViewControllerbackgroundColor 和比!您将看到容器视图的背景色。

- (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];

【讨论】:

【参考方案3】:

页面控件默认是透明的。

查看此示例代码:

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]];

请在下方找到更多自定义选项

页面控件的外观

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

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

色调颜色

自定义页面控件外观的唯一方法是为代表每个页面的点设置自定义色调。当前页面 (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 documentation查看更多详情

【讨论】:

这更多是为了点,而不是为了背景——你在那里看到的黑色背景 @sselvan:我明确提到“页面控件默认是透明的” hmmm,我还是菜鸟,默认是白色背景。 无论如何我克服了我在问题中更新的不同解决方案 @sselvan:检查我更新的答案并尝试代码。让我知道结果。透明或白色背景!!!!它应该是透明的。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

我终于在 Swift 中找到了解决这个问题的有效方法。你可以在这个link找到原始代码和答案。

它需要你重写 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!)
        
    

【讨论】:

【参考方案6】:

如果您将UIPageControl 的背景颜色设置为与您的VC 的背景颜色 相同的背景图片,它可能会起作用:

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

【讨论】:

【参考方案7】:

这是胡安·阿里扎的延伸答案

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!)
    

【讨论】:

【参考方案8】:

试试这个:

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];

【讨论】:

[[self pageControl] setBackgroundColor:[UIColor clearColor]];从 Xcode 6.1.1 开始为我工作。仅供参考,任何人都在寻找有关如何将 UIPageControl 的背景设置为透明的解决方案。

以上是关于UIPageControl - 如何使背景透明?的主要内容,如果未能解决你的问题,请参考以下文章

如何允许 div 不透明而不是背景图像?

如何使DIV背景透明内容不透明

如何使 Android BottomNavigationView 背景透明?

SwiftUI:如何使列表视图透明?如何更改列表视图背景颜色?

如何在 Android 上使背景透明 20%

如何使我的网站背景透明而不使内容(图像和文本)也透明?