今天碰到一個問題,UIScrollView上面放了一個滾動圖片控件酌心,但不是UIScrollView的scrollHeaderView,因為UIScrollView不像tableview有這個方法,于是把UIScrollView inset設(shè)置一下蚤霞,讓其往下拉動一定距離。這樣滾動圖片添加到UIScrollView上面义钉,設(shè)置下frame昧绣,也能一起滾動,皆大歡喜朴上。
那么問題來了缨叫,MJRfresh刷新數(shù)據(jù)的時候看不到狀態(tài)欄宏粤。很顯然,控件將刷新狀態(tài)擋住了贪绘。這樣只能嘗試改動源碼了。一向?qū)磸?fù)雜代碼有種恐懼癥央碟。先來學(xué)習(xí)一波税灌。
我們都知道,MJRfresh是用contentInset實現(xiàn)的亿虽。默認情況下菱涤,如果一個UIScrollView的左上角在導(dǎo)航欄的正下方,那么它的contentInset是64洛勉,而contentOffset是-64粘秆。繼續(xù)下拉的話,contentOffset就會越來越小收毫,如果上滑攻走,contentOffset就會增大,直到左上角達到屏幕的左上角時此再,contentOffset剛好為0昔搂。
默認情況下,如果下拉一個UIScrollView引润,在松手之后巩趁,會彈回初始的位置(導(dǎo)航欄下方)。而大部分的下拉刷新控件淳附,都是將自己放在UIScrollView的上方议慰,起始y設(shè)置成負數(shù),所以平時不會顯示出來奴曙,只有下拉的時候才會出現(xiàn)别凹,放開又會彈回去。然后在loading的時候洽糟,臨時把contentInset增大炉菲,相當(dāng)于把UIScrollView往下擠堕战,于是下拉刷新的控件就會顯示出來,然后刷新完成之后拍霜,再把contentInset改回原來的值嘱丢,實現(xiàn)回彈的效果
看了之后覺得應(yīng)該是進去改個contentInset.y,當(dāng)時想源碼肯定把y設(shè)置為定值了,改源碼還要分正常Inset和這種不正常Inset兩種情況祠饺,搞個BOOL值判斷一下越驻。
隨便進去,很容易發(fā)現(xiàn)了“設(shè)置位置”
猜想有設(shè)置y,搜索mj_y道偷,在header里有個如下:
自己在后面添加一個負數(shù)缀旁,發(fā)現(xiàn)位置果然變了。那按照自己的想法判斷一下勺鸦,多減去一個定值就OK了并巍,屁顛的跑到.h文件里,突然發(fā)現(xiàn)原來大神早都設(shè)置好了换途。