美文网首页ios开发iOS Developer
如何一直显示ScrollView和其之类的滚动条

如何一直显示ScrollView和其之类的滚动条

作者: 纪叙 | 来源:发表于2016-12-14 13:35 被阅读254次

    在 IOS 中,对 UIScrollView 的滚动条(ScrollBar Indicators)的自定义设置接口,一直都是很少的。除了能自定义简单的样式(UIScrollViewIndicatorStyle)和是否启用外,对于 一直显示滚动条、自定义滚动条(ScrollBar Indicators)的Width 、颜色等,都是不能很方便的设置的。 虽然不能很方便,但是还是能实现的。

    首先分析几个问题:

    1. 那些控件可以设置滚动条(ScrollBar Indicators)

    因为UIScrollView 是 UITableView 和 UITextView 的父类,所以可以设置的Controll: UIScrollView, UITableView, UITextView.

    2. UIScrollView 的 - (void)flashScrollIndicators 方法

    该方法是调用 object-c 方法显示 UIScrollView 的滚动条(ScrollBar Indicators)。但是悲剧的是滚动条(ScrollBar Indicators) 只会显示大概1.5秒左右的时间,就会自动隐藏。 不过该方法还是有一定的应用场景,比如你认为只要在 UIScrollView Load 的时间,右侧显示2秒的滚动条就能起到提示作用,那这个方法刚好满足你:

     [tableView reloadData];

    if (tableView.contentSize.height >tableView.frame.size.height)

    {tableView flashScrollIndicators]; }

    3. 滚动条(ScrollBar Indicators)是什么东西、是如何显示和隐藏掉的

    UIScrollView 的 滚动条(ScrollBar Indicators),就是默认右侧的 darkgray 条,当你滚动一个 UIScrollView 的时间,这个滚动条就会显示,并且显示和隐藏都是淡入和淡出的。 这是,你或许就能猜到是什么了:UIImageView. 滚动条就是一个UIImageView,那个滚动条就是一个图片而已。而滚动条的消失、隐藏淡入淡出,都是设置的 UIImageView的 -(void) setAlpha 方法。

    到了这里,我们就有解决方案了。为UIImageView创建一个类别(这个应该大家都会哦),重新它的setAlpha方法。代码如下:

    #define noDisableVerticalScrollTag 836913

    #define noDisableHorizontalScrollTag 836914

    @implementation UIImageView (ForScrollView)

    - (void) setAlpha:(CGFloat)alpha {

    if (self.superview.tag == noDisableVerticalScrollTag) {

    if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleLeftMargin) {

    if (self.frame.size.width < 10 && self.frame.size.height > self.frame.size.width) {

    UIScrollView *sc = (UIScrollView*)self.superview;

    if (sc.frame.size.height < sc.contentSize.height) {

    return;

    }

    }

    }

    }

    if (self.superview.tag == noDisableHorizontalScrollTag) {

    if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleTopMargin) {

    if (self.frame.size.height < 10 && self.frame.size.height < self.frame.size.width) {

    UIScrollView *sc = (UIScrollView*)self.superview;

    if (sc.frame.size.width < sc.contentSize.width) {

    return;

    }

    }

    }

    }

    [super setAlpha:alpha];

    }

    @end

    该方法使用 Tag 来确定是否需要一直显示滚动条 因为该方法重写了 setAlpha,所以所有的 UIImageView 在加载的时间都会请求这段代码的,但不可能每个都处理,所以,通过 Controller中ScrollView 的Tag 来区分,也是不错的选择。当然,这里是比较 Tag 是否相等,你也可以比较 Tag 是否大于某个值等等。

    通过一些列的 if 比较,确定该 UIScrollView :是水平还是垂直的滚动条、该 UIImageView 是否是想要隐藏 和 UIScrollView 的正文内容区域是否溢出来确定是否要隐藏,即是否要设置:[super setAlpha:0];

     如果执行 [super setAlpha:0],则隐藏,return 就继续显示

    在 viewDidLoad 内:

    //一直显示滚动条的控件

    tableView.tag = 836913;

    c. 要在 UIScrollView 数据绑定后,即加载完成后:flashScrollIndicators

    //重新绑定数据

    [tableView reloadData];

    [tableView flashScrollIndicators];

    到这里就结束了。有问题的小伙伴可以留言交流。

    相关文章

      网友评论

        本文标题:如何一直显示ScrollView和其之类的滚动条

        本文链接:https://www.haomeiwen.com/subject/weuimttx.html