Kaa*_*glu 32
不幸的是你不能,当然你可以随时自己动手.这些是你的选择:
UIScrollViewIndicatorStyleDefault:
滚动指示器的默认样式,黑色,带有白色边框.这种风格适用于任何内容背景.
UIScrollViewIndicatorStyleBlack:
一种黑色且小于默认样式的指示器样式.这种风格对白色内容背景很好.
UIScrollViewIndicatorStyleWhite:
指示器样式为白色且小于默认样式.这种风格对黑色内容背景很好.
And*_*eev 16
这里有更安全的Swift 3方法:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let verticalIndicator = scrollView.subviews.last as? UIImageView
verticalIndicator?.backgroundColor = UIColor.green
}
Run Code Online (Sandbox Code Playgroud)
Vin*_*ary 10
UIScrollView指标都是UIScrollView的子视图.因此,我们可以访问UIScrollView的子视图并更改子视图的属性.
1.添加UIScrollViewDelegate
@interface ViewController : UIViewController<UIScrollViewDelegate>
@end
Run Code Online (Sandbox Code Playgroud)
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]];
}
Run Code Online (Sandbox Code Playgroud)
注意: - 因为每次滚动时这些指示器都会更新(意味着重置为默认值).所以,我们将此代码放在scrollViewDidScroll委托方法中.
GitHub上提供的演示 - https://github.com/ioshacks/UIScrollViewIndicatorColor
根据@Alex ( /sf/answers/4089067461/ )的回答,我发布了一些改进来更改滚动指示器的颜色。
extension UIScrollView {
var scrollIndicators: (horizontal: UIView?, vertical: UIView?) {
guard self.subviews.count >= 2 else {
return (horizontal: nil, vertical: nil)
}
func viewCanBeScrollIndicator(view: UIView) -> Bool {
let viewClassName = NSStringFromClass(type(of: view))
if viewClassName == "_UIScrollViewScrollIndicator" || viewClassName == "UIImageView" {
return true
}
return false
}
let horizontalScrollViewIndicatorPosition = self.subviews.count - 2
let verticalScrollViewIndicatorPosition = self.subviews.count - 1
var horizontalScrollIndicator: UIView?
var verticalScrollIndicator: UIView?
let viewForHorizontalScrollViewIndicator = self.subviews[horizontalScrollViewIndicatorPosition]
if viewCanBeScrollIndicator(view: viewForHorizontalScrollViewIndicator) {
horizontalScrollIndicator = viewForHorizontalScrollViewIndicator.subviews[0]
}
let viewForVerticalScrollViewIndicator = self.subviews[verticalScrollViewIndicatorPosition]
if viewCanBeScrollIndicator(view: viewForVerticalScrollViewIndicator) {
verticalScrollIndicator = viewForVerticalScrollViewIndicator.subviews[0]
}
return (horizontal: horizontalScrollIndicator, vertical: verticalScrollIndicator)
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不添加.subviews[0]
,您将获得更深入的视图,并且当您尝试更改指示器的颜色时,它会出现奇怪的白色效果。那是因为前面还有一个视图:
通过添加.subviews[0]
到每个指标视图,一旦您尝试通过调用更改颜色:
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
DispatchQueue.main.async() {
scrollView.scrollIndicators.vertical?.backgroundColor = UIColor.yourcolor
}
}
Run Code Online (Sandbox Code Playgroud)
您将访问第一个视图并正确更改颜色:
感谢@Alex 发布了一个很好的解决方案
在IOS 13
试试这个
func scrollViewDidScroll(_ scrollView: UIScrollView){
if #available(iOS 13, *) {
(scrollView.subviews[(scrollView.subviews.count - 1)].subviews[0]).backgroundColor = UIColor.themeColor(1.0) //verticalIndicator
(scrollView.subviews[(scrollView.subviews.count - 2)].subviews[0]).backgroundColor = UIColor.themeColor(1.0) //horizontalIndicator
} else {
if let verticalIndicator: UIImageView = (scrollView.subviews[(scrollView.subviews.count - 1)] as? UIImageView) {
verticalIndicator.backgroundColor = UIColor.themeColor(1.0)
}
if let horizontalIndicator: UIImageView = (scrollView.subviews[(scrollView.subviews.count - 2)] as? UIImageView) {
horizontalIndicator.backgroundColor = UIColor.themeColor(1.0)
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27151 次 |
最近记录: |