美文网首页Swift&Objective-C其他iOS
谈一谈UIScrollView的scrollsToTop属性

谈一谈UIScrollView的scrollsToTop属性

作者: lexiaoyao20 | 来源:发表于2016-04-04 00:27 被阅读2714次

    相信很多人都没有注意到iOS有这样一个隐藏的功能:当前页面有滚动视图( UIScrollView 或者 UIScrollView 的子类,下面我都称作滚动视图),触摸状态栏,视图会自动滚动的最顶端,相当于一些网页的回到顶端的功能。下面给个图来展示下:

    图1:触摸状态栏回到顶部

    一. 遇到的问题

    如果页面有多个滚动视图,如顶部一个广告轮播控件(假如是基于 UIScrollView 的轮播控件),下面是一个TableView,你会发现触摸状态栏没有反应了,回到顶部功能失效。

    二. 解决问题

    细细研究了一番返现,UIScrollView 有个scrollsToTop属性,这个属性就是控制滚动到顶部手势的开关。它的默认值是 YES ,所以不用我们设置,默认是支持滚动到顶部的。具体详细描述如下:

    The scroll-to-top gesture is a tap on the status bar. When a user makes this gesture, the system asks the scroll view closest to the status bar to scroll to the top. If that scroll view has scrollsToTop
    set to NO , its delegate returns NO from scrollViewShouldScrollToTop:
    , or the content is already at the top, nothing happens.

    简单点的说就是有两种方式来设定 scroll to top,一个是设置 scrollsToTop 属性,另一个是实现UIScrollView的代理方法scrollViewShouldScrollToTop:。如果滚动视图scrollsToTop属性设为 NO ,它的代理方法scrollViewShouldScrollToTop:返回NO,或者内容已经在顶部了,这样触摸状态栏,是没有任何反应的。

    好了,继续回到上面遇到的问题,既然默认是YES,为什么回到顶部的功能失效了呢,其实仔细想一想就知道了,因为有两个 scrollView,他们默认都有 scroll to top 功能,所以触摸状态栏时,系统无法判断是使哪个ScrollView回到顶部。

    解决方案很简单,就是设置其中一个ScrollView的 scrollsToTop 值为 NO(例如我将广告轮播控件的 scrollsToTop 设为 NO ),这样系统就知道要使哪个 ScrollView 回到顶部了。如果当前页面有多个滚动视图的话,要确保只有一个滚动视图scrollsToTop的值为YES

    相关文章

      网友评论

      本文标题:谈一谈UIScrollView的scrollsToTop属性

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