谈一谈UIScrollView的scrollsToTop属性
相信很多人都没有注意到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 toNO
, its delegate returnsNO
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回到顶部。【谈一谈UIScrollView的scrollsToTop属性】解决方案很简单,就是设置其中一个ScrollView的
scrollsToTop
值为 NO
(例如我将广告轮播控件的 scrollsToTop
设为 NO
),这样系统就知道要使哪个 ScrollView
回到顶部了。如果当前页面有多个滚动视图的话,要确保只有一个滚动视图scrollsToTop
的值为YES
。推荐阅读
- 2019-02-13——今天谈梦想()
- (七)谈条件
- 山香|山香 善思 智学访谈
- 从我的第一张健身卡谈传统健身房
- 我在一条路上走了5年
- FBI怎么和恐怖分子谈判
- 跟身体谈恋爱
- 二论鲲鹏(夜话庄子2)
- 深入浅出谈一下有关分布式消息技术(Kafka)
- 快意恩仇