ios将UIScrollView滚动条颜色更改为不同的颜色

我们如何将UIScrollview的滚动指标的颜色更改为蓝色,绿色等

我知道我们可以把它改成白色,黑色。 但其他那些颜色。

非常感谢

不幸的是,你不能,当然你可以随时推出自己的。 这些是你的select:

UIScrollViewIndicatorStyleDefault:

滚动指示器的默认样式,黑色,白色边框。 这种风格是对任何内容的背景。

UIScrollViewIndicatorStyleBlack:

黑色,比默认风格小的指标风格。 这种风格对白色内容背景是很好的。

UIScrollViewIndicatorStyleWhite:

指示器的风格是白色的,比默认的风格小。 这种风格对黑色内容背景很好。

这里有更安全的Swift 3方法:

func scrollViewDidScroll(_ scrollView: UIScrollView) { let verticalIndicator = scrollView.subviews.last as? UIImageView verticalIndicator?.backgroundColor = UIColor.green } 

两个UIScrollView指标都是UIScrollView的子视图。 所以我们可以访问UIScrollView的子视图并改变子视图的属性。

1,添加UIScrollViewDelegate

 @interface ViewController : UIViewController<UIScrollViewDelegate> @end 

2.在实现部分添加scrollViewDidScroll

 -(void)scrollViewDidScroll:(UIScrollView *)scrollView1 { //get refrence of vertical indicator UIImageView *verticalIndicator = ((UIImageView *)[scrollView.subviews objectAtIndex:(scrollView.subviews.count-1)]); //set color to vertical indicator [verticalIndicator setBackgroundColor:[UIColor redColor]]; //get refrence of horizontal indicator UIImageView *horizontalIndicator = ((UIImageView *)[scrollView.subviews objectAtIndex:(scrollView.subviews.count-2)]); //set color to horizontal indicator [horizontalIndicator setBackgroundColor:[UIColor blueColor]]; } 

注意: – 因为这些指标每次滚动时都会更新(意味着重置为默认值)。 所以,我们把这个代码放在scrollViewDidScroll委托方法中。

在这里输入图像说明 演示可用GitHub – https://github.com/ioshacks/UIScrollViewIndicatorColor

Swift 2.0:

添加UIScrollView委托。

 func scrollViewDidScroll(scrollView: UIScrollView){ let verticalIndicator: UIImageView = (scrollView.subviews[(scrollView.subviews.count - 1)] as! UIImageView) verticalIndicator.backgroundColor = UIColor.greenColor() let horizontalIndicator: UIImageView = (scrollView.subviews[(scrollView.subviews.count - 2)] as! UIImageView) horizontalIndicator.backgroundColor = UIColor.blueColor() } 

你可以改变一个指标的图像,但是你应该重复地做这个

 func scrollViewDidScroll(_ scrollView: UIScrollView) { self.chageScrollIndicator() } func chageScrollIndicator (){ if let indicator = self.collection.subviews.last as? UIImageView { let edge = UIEdgeInsets(top: 1.25, left: 0, bottom: 1.25, right: 0) indicator.image = UIImage(named: "ScrollIndicator")?.withRenderingMode(.alwaysTemplate).resizableImage(withCapInsets: edge) indicator.tintColor = UIConfiguration.textColor } } 

你可以使用这个2图像作为模板: 将此图片用于@ 2x 将此图片用于@ 3x

不久前我写了一篇关于这个的文章。 不幸的是,由预先定义的图像定义的这个条的颜色,所以如果你要改变条的颜色,将需要一些额外的工作。 看看下面的链接,你肯定会find答案,因为我试图解决同样的问题。

http://leonov.co/2011/04/uiscrollviews-scrollbars-customization/

试试这个肯定会帮助你

  for ( UIView *view in scrollBar.subviews ) { if (view.tag == 0 && [view isKindOfClass:UIImageView.class]) { UIImageView *imageView = (UIImageView *)view; imageView.backgroundColor = [UIColor yellowColor]; } } 

说明 :UIScrollBar是子视图的集合。 这里scrollBar指标(垂直/水平)是子视图之一,它是一个UIImageView.So如果我们设置自定义颜色的UIImageView它影响scrollBar指标。

这是滚动条的颜色如何改变:

  //scroll view UIScrollView *scView = [[UIScrollView alloc] init]; scView.frame = self.view.bounds; //scroll view occupies full parent views scView.contentSize = CGSizeMake(400, 800); scView.backgroundColor = [UIColor lightGrayColor]; scView.indicatorStyle = UIScrollViewIndicatorStyleBlack; scView.showsHorizontalScrollIndicator = NO; scView.showsVerticalScrollIndicator = YES; scView.scrollEnabled = YES; [self.view addSubview: scView]; 

如果你想添加图片,这里是Swift 3的代码

 func scrollViewDidScroll(_ scrollView: UIScrollView) { let verticalIndicator = scrollView.subviews.last as? UIImageView verticalIndicator?.image = UIImage(named: "imageName") } 

这也适用于UITableView和UICollectionView。

您可以使用自定义的UIScrollView滚动条来实现滚动条的颜色。 更多细节请看这里

我最近遇到了同样的问题,所以我决定写一个类别。

https://github.com/stefanceriu/UIScrollView-ScrollerAdditions

 [someScrollView setVerticalScrollerTintColor:someColor]; [someScrollView setHorizontalScrollerTintColor:someColor];` 

它将它与原始图像混合,所以只有颜色会改变。 另一方面,也可以修改它以提供滚动条使用的自定义图像。

这就是我在Swift 4中所做的,与以前的答案类似。 在我的情况下,我重新着色图像是不可见的,设置正确的angular半径,只执行一次这个过程。

 func scrollViewDidScroll(_ scrollView: UIScrollView) { let color = UIColor.red guard let verticalIndicator = scrollView.subviews.last as? UIImageView, verticalIndicator.backgroundColor != color, verticalIndicator.image?.renderingMode != .alwaysTemplate else { return } verticalIndicator.layer.masksToBounds = true verticalIndicator.layer.cornerRadius = verticalIndicator.frame.width / 2 verticalIndicator.backgroundColor = color verticalIndicator.image = verticalIndicator.image?.withRenderingMode(.alwaysTemplate) verticalIndicator.tintColor = .clear }