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图像作为模板:
不久前我写了一篇关于这个的文章。 不幸的是,由预先定义的图像定义的这个条的颜色,所以如果你要改变条的颜色,将需要一些额外的工作。 看看下面的链接,你肯定会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 }