Я использую UIPageViewController в своем приложении, и он работает нормально. однако элемент управления страницей, который был добавлен автоматически, имеет черный фон, который скрывает нижний материал контроллера текущего вида (см. рисунок ниже). можно ли вызвать элемент управления страницей UIPageViewController и изменить его цвет? Я хочу, чтобы элемент управления страницей отображался над контроллером представления (например, пошаговое руководство для приложения Path), например, чтобы очистить цвет вместо черного.UIPageViewController страница управления цветом фона
ответ
Вы можете использовать appearance
, чтобы изменить цвет UIPageControl в противном случае она не доступна. Попробуйте сделать это в своей функции AppAppDelegate, как показано ниже.
- (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
не UIPageControl
. Вы можете изменить этот цвет следующим образом:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor]; //Set it to whatever you like
}
спасибо, но на самом деле он не мог сделать его прозрачным, чтобы я мог показать, что находится под ним ([uicolor clearcolor]). однако это ценная информация. у меня есть вопрос и надеюсь, что вы дадите мне больше информации. как он узнает, какой pageControl я нацеливаюсь? как выглядит внешний вид? Спасибо огромное! – user1938695
@ user1938695 Если вы хотите, чтобы он был прозрачным, возьмите последнюю строку его кода и измените его следующим образом: 'pageControl.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent: 0.5f];' – BrianS
Это меня закрыло, но я по-прежнему не может обеспечить прозрачность фона. –
Просто подкласс 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;
}
}
}
Это позволит увеличить внутреннюю рамку просмотра прокрутки.
Добавить следующий код в UIPageViewController.
- (void)viewDidLoad {
[super viewDidLoad];
[[UIPageControl appearance] setPageIndicatorTintColor: [UIColor grayColor]];
[[UIPageControl appearance] setCurrentPageIndicatorTintColor: [UIColor whiteColor]];
[[UIPageControl appearance] setBackgroundColor: [UIColor darkGrayColor]];
}
Обновление для 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()
}
}
}
Вот Swift 2 + версия Ответ Yas-T «s
//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()
}
Доступно только на iOS 9.0. – Phil
Вот 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
}
Override функция 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
}
}
}
Это может быть полезно. http: // stackoverflow.com/questions/17684922/change-uipageviewcontroller-own-pagecontroller-about-color-of-dots http://stackoverflow.com/questions/17466718/can-we-customize-the-page-indicator-in -uipageviewcontroller –