相信很多人都沒有注意到iOS有這樣一個隱藏的功能:當(dāng)前頁面有滾動視圖( UIScrollView
或者 UIScrollView
的子類跪妥,下面我都稱作滾動視圖),觸摸狀態(tài)欄烙肺,視圖會自動滾動的最頂端膊升,相當(dāng)于一些網(wǎng)頁的回到頂端的功能址愿。下面給個圖來展示下:
一. 遇到的問題
如果頁面有多個滾動視圖混移,如頂部一個廣告輪播控件(假如是基于 UIScrollView
的輪播控件)祠墅,下面是一個TableView,你會發(fā)現(xiàn)觸摸狀態(tài)欄沒有反應(yīng)了歌径,回到頂部功能失效毁嗦。
二. 解決問題
細(xì)細(xì)研究了一番返現(xiàn),UIScrollView
有個scrollsToTop屬性回铛,這個屬性就是控制滾動到頂部手勢的開關(guān)狗准。它的默認(rèn)值是 YES
,所以不用我們設(shè)置茵肃,默認(rèn)是支持滾動到頂部的腔长。具體詳細(xì)描述如下:
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.
簡單點(diǎn)的說就是有兩種方式來設(shè)定 scroll to top
,一個是設(shè)置 scrollsToTop
屬性验残,另一個是實(shí)現(xiàn)UIScrollView
的代理方法scrollViewShouldScrollToTop:捞附。如果滾動視圖scrollsToTop
屬性設(shè)為 NO
,它的代理方法scrollViewShouldScrollToTop:返回NO
您没,或者內(nèi)容已經(jīng)在頂部了鸟召,這樣觸摸狀態(tài)欄,是沒有任何反應(yīng)的紊婉。
好了药版,繼續(xù)回到上面遇到的問題辑舷,既然默認(rèn)是YES喻犁,為什么回到頂部的功能失效了呢,其實(shí)仔細(xì)想一想就知道了何缓,因?yàn)橛袃蓚€ scrollView肢础,他們默認(rèn)都有 scroll to top
功能,所以觸摸狀態(tài)欄時碌廓,系統(tǒng)無法判斷是使哪個ScrollView回到頂部传轰。
解決方案很簡單,就是設(shè)置其中一個ScrollView的 scrollsToTop
值為 NO
(例如我將廣告輪播控件的 scrollsToTop
設(shè)為 NO
)谷婆,這樣系統(tǒng)就知道要使哪個 ScrollView
回到頂部了慨蛙。如果當(dāng)前頁面有多個滾動視圖的話,要確保只有一個滾動視圖scrollsToTop
的值為YES
纪挎。