Ios UIPageControl-如何使背景透明?
我正在使用Ios UIPageControl-如何使背景透明?,ios,objective-c,uipagecontrol,Ios,Objective C,Uipagecontrol,我正在使用UIPageControl并试图使背景透明 UIPageControl *pageControl = [UIPageControl appearance]; pageControl.pageIndicatorTintColor = [UIColor lightGrayColor]; pageControl.currentPageIndicatorTintColor = [UIColor blackColor]; pageControl.backgroundColor = [UIColo
UIPageControl
并试图使背景透明
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor blackColor];
有什么建议吗
尝试
不走运
============
好的,如@powerj1984和@daniellarssonUIPageControl
所述,就位置和背景色而言,似乎是不可更改的
所以我决定将其移动到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;
页面控件在默认情况下是透明的。 使用以下示例代码进行检查:
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外观])。有关外观代理的详细信息
着色颜色
自定义页面控件外观的唯一方法是为表示每个页面的点设置自定义色调。“当前页面”(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];
查看好的中的更多详细信息,正如@powerj1984和@daniellarsson提到的那样,UIPageControl在位置和背景色方面似乎是不可更改的 所以我决定将其移动到UIViewController,并创建了一个UIPageControl和
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
然后将其置于我的UIPageViewController顶部,如viewDidLoad中所示
self.pageControl.numberOfPages = self.pageTitles.count;
[self.view addSubview:_pageControl.viewForBaselineLayout];
然后,我更新了ViewControllerBeforReviewController和viewControllerAfterViewController中UIPageControl的索引
NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex;
self.pageControl.currentPage = index;
试试这个:
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];
从Xcode 6.1.1和iOS 8.1.1开始,我知道将UIPageControl对象的背景色设置为清晰的颜色对我来说很有效
[[self pageControl] setBackgroundColor:[UIColor clearColor]];
他在工作,但是!!然后您必须将UIPageViewController
的backgroundColor
也设置在[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];
}
如果您将
UIPageControl
的背景色设置为与VC的背景色相同的背景图像,则该功能可能会起作用:
我终于在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!)
}
}
以下是胡安·阿里扎的答案
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!)
}
}
除非这在iOS 7中更新,否则我不认为背景色是UIPageControl外观的一个选项,请参见以下答案:它现在是什么颜色?我认为你不能再通过外观来编辑背景色了,我会假设它默认是透明的??默认为白色,我通过presentationCountForPageViewController和PresentationIndexFormageViewController添加了这一点。当我将via Storyboard添加为页面控件时,页面控件是透明的。你能看到点吗?@sselvan我遇到了完全相同的问题,你能更详细地说明你如何克服这个问题吗,你可以回答你自己的问题这是点的问题,似乎不是背景-你看到的黑色背景there@sselvan:我清楚地提到“默认情况下页面控件是透明的”嗯,我在这里仍然是一个noob,默认情况下它有白色的背景。无论如何,我用一个不同的解决方案克服了这个问题,我在我的question@sselvan:检查我的更新答案并尝试代码。让我知道结果。透明或白色背景!!!。它应该是透明的,我也有同样的问题。我需要将页面控件的背景颜色更改为透明,并且我需要显示页面指示点。感谢您的解决方案!主要是为我工作。。。现在的问题是,当我向后滚动(我只有2页)时,它不会更新当前页面。这是因为它在完成转换之前不会调用
viewControllerBeforeViewController
,因此索引再次为0,该方法将返回nil。此链接非常有用[[self pageControl]setBackgroundColor:[UIColor clearColor]];从Xcode 6.1.1开始为我工作。仅供大家参考,了解如何将UIPageControl的背景设置为透明。
[UIPageControl appearance].backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pageControllerBackground"]];
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!)
}
}
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!)
}
}