ASJColoredScrollIndicators
标准的 UIScrollView
提供了有限的自定义滚动指示器的选项,只有一个枚举类型 UIScrollViewIndicatorStyle
,这可能会显得有些不足。有时根据应用的样式来绘制指示器是非常有意义的,这样可以让应用看起来更加生动。这个小工具提供了一种轻量级的解决方案,可以将颜色应用到滚动指示器上。
在遇到 JTSScrollIndicator 并查看其实现后,我感到可能会有一个更简单的方法来完成这个任务。我的实现通过获取滚动指示器对象本身并将它们绘制到所需的颜色中,这感觉是一个更简单、更直接的方法。
安装
CocoaPods 是安装此库的首选方式。将以下命令添加到您的 Podfile
中:
pod 'ASJColoredScrollIndicators'
使用方法
导入 ASJColoredScrollIndicators.h
并将此属性设置到任意的 UIScrollView
上。
@property (nullable, strong, nonatomic) UIColor *scrollIndicatorColor UI_APPEARANCE_SELECTOR;
将水平和垂直滚动指示器绘制为所需颜色。
您也可以通过 UIAppearance
来设置属性,以全局设置颜色。
[UIScrollView appearance].scrollIndicatorColor = [UIColor blueColor];
由于这是一个关于UIScrollView
的分类,它与所有子类都兼容
UITableView
UICollectionView
UITextView
工作原理
UIScrollView
的滚动指示器并非公开可用。查看其子视图,我们发现有两个看似指示器的UIImageView
。它们的宽度或高度为2.5点。有趣的是,无论你的视图是否在两个方向上滚动,都会存在垂直和水平指示器对象。
因此,似乎修改这些UIImageView
即可完成任务。但并非如此!我发现的这些对象在滚动活动时会发生改变;它们的内存地址不同。每次都这样。你可以在scrollViewDidScroll:
或scrollViewWillBeginDragging
中检查指示器,那里的地址相同,但与UIScrollView
最初加载时的地址不同。
当这个问题清晰时,其余的就很简单了。我尝试改变这些UIImageView
的背景颜色,但效果并不理想;仍然有一些透明度。最终,我移除了图片的彩色信息,并将背景颜色设置到了经过一些圆整以使其看起来像默认指示器的UIImageView
上。成功了!
这个颜色更改只在进行了一次,当UIScrollView
即将第一次滚动时。
注意:自iOS 13以来,指示器不再是UIImageView
,而是名为_UIScrollViewScrollIndicator
的私有UIView
子类。
致谢
- 感谢
Shashank Pali 致力于将这一功能统一到一个分类下。
待办事项
添加UICollectionView
和UITextView
。找到将这四个功能结合在一个类中的方法。
许可证
ASJColoredScrollIndicators
遵守MIT许可证。请参阅LICENSE文件了解更多信息。