UIPageControl - Как сделать фон прозрачным?

Я использую 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]; 

Затем я обновил индекс UIPageControl в viewControllerBeforeViewController и viewControllerAfterViewController

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

Ответы

Ответ 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]; 

Затем я обновил индекс UIPageControl в viewControllerBeforeViewController и viewControllerAfterViewController

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

Ответ 2

pageControl.backgroundColor = [UIColor clearColor];

работает, но!! чем вы должны установить backgroundColor для 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];
}

Ответ 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]];

Пожалуйста, найдите дополнительные возможности настройки ниже

Внешний вид элементов управления страницы

Вы можете настроить внешний вид элемента управления страницы, установив свойства, изображенные ниже.

enter image description here

Чтобы настроить внешний вид всех элементов управления страницы в приложении, используйте прокси-сервер (например, [UIPageControl внешний вид]). Для получения дополнительной информации о внешних прокси-серверах см. Пространства внешнего вида.

Цвет оттенков

Единственный способ настроить внешний вид элемента управления страницы - это настроить пользовательские оттенки для точек, представляющих каждую страницу. Поле Current Page (currentPageIndicatorTintColor) влияет на цвет точки, представляющей отображаемую на данный момент страницу, а поле Tint Color (pageIndicatorTintColor) влияет на цвет точек, представляющих каждую другую страницу. Цвет по умолчанию белый для текущей точки страницы и полупрозрачный серый для других точек страницы.

enter image description here

Если вы хотите, чтобы ваши пользовательские цвета были полупрозрачными, вы должны указать цвет с альфа-значением менее 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 - документация разработчика.

Ответ 4

Как и в Xcode 6.1.1 и iOS 8.1.1, я знаю, что настройка фонового цвета объекта UIPageControl на прозрачный цвет работала для меня.

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

Ответ 5

Наконец-то я нашел рабочее решение для этой проблемы в Swift. Вы можете найти исходный код и ответ в этой ссылке.

Это требует, чтобы вы переопределили функцию 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

Вот ответ с расширением Juan Ariza

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