ios - medium - uipageviewcontroller swift 4




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

Вот версия 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()
}

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


Вот версия принятого ответа 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
}

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

Переопределить функцию 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
        }
    }
}

Вы можете использовать appearance чтобы изменить цвет UIPageControl, поскольку в противном случае он недоступен. Попробуйте сделать это в своей функции appFeishLaunchingWithOptions в didFinishLaunchingWithOptions как 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 видWonContainedIn вместо следующего:

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

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

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

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




uipageviewcontroller