Подтвердить что ты не робот

Цвет фона для управления страницей UIPageViewController

Я использую UIPageViewController в своем приложении, и он работает нормально. однако элемент управления страницей, который был добавлен автоматически, имеет черный фон, который скрывает текущий материал контроллера текущего вида (см. рисунок ниже). можно ли вызвать элемент управления UIPageViewController и изменить его цвет? Я хочу, чтобы элемент управления страницей отображался над контроллером представления (например, пошаговое руководство для приложения Path), например, чтобы очистить цвет вместо черного.

enter image description here

4b9b3361

Ответ 1

Вы можете использовать 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;
}

Чтобы применить стиль только к определенному контроллеру представления, вы можете использовать appearanceWhenContainedIn вместо этого:

UIPageControl *pageControl = [UIPageControl appearanceWhenContainedIn:[MyViewController class], nil];

Только теги UIPageControl, содержащиеся в MyViewController, получат этот стиль.

EDIT: Черный фон вокруг UIPageControl внизу экрана связан с цветом фона вашего UIPageViewController not UIPageControl. Вы можете изменить этот цвет следующим образом:

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

Ответ 2

Обновлено для 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
        }
    }
}

Пример 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()
        }
    }
}

Ответ 3

Просто подкласс 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;
    }
  }
}

Это расширит внутренний кадр просмотра прокрутки.

Ответ 4

Добавьте следующий код в UIPageViewController.

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

Ответ 5

Вот Swift 2 + версия Yas-T Отвечать

//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()
}

Ответ 6

Вот версия принятого ответа Swift 3 + (с плюсом созданного пользовательского цвета):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    if #available(iOS 9.0, *) {

        let pageControl = UIPageControl.appearance(whenContainedInInstancesOf: [UIPageViewController.self])
        pageControl.pageIndicatorTintColor = UIColor.init(colorLiteralRed: 43/255.0, green: 170/255.0, blue: 226/255.0, alpha: 0.4)
        pageControl.currentPageIndicatorTintColor = UIColor.init(colorLiteralRed: 43/255.0, green: 170/255.0, blue: 226/255.0, alpha: 1.0)        
    }

    return true
}

Ответ 7

Переопределить функцию viewDidLayoutSubviews() в PageViewController:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    for view in view.subviews{
        if view is UIScrollView{
            view.frame = UIScreen.main.bounds
        }else if view is UIPageControl{
            view.backgroundColor = UIColor.clear
        }
    }
}