最近用RN重構一個較爲複雜的原生頁面,裏面就用到了相似這種設計,以下圖所示 react
首先分析一下github和各大內外網能google獲得的blog裏的方案,大部分跟我要的需求不一致,一部分用NativeComponent實現的,這就脫離了跨平臺的初衷,一部分動畫作的不好,Android端很是卡,目前爲止看到最接近這種效果的是這位的博文 medium.com/@andi.gu.ca… git
看源碼能夠知道是用的ScrollView嵌套TableView的方案,Demo裏確實效果很完美,可是這個方案有兩個致命的問題,github
踩坑到這一步,時間已通過去了一週左右,本覺得完美的方案,卻仍是有這麼多致命的問題,可是基本得出結論,不能使用ScrollView嵌套FlatList的方案,而後切換回單層FlatList,頂部Header跟隨FlatList偏移量作動畫的方案react-native
接下來要解決的就是一個scrollableTableView下的多個FlatList偏移量保持同步的問題(不保持同步會形成頭部與FlatList之間偏移量異常的問題),這個問題比較簡單,經過用一個數組,保存每一個FlatList的Ref屬性,而後在當前屏幕裏的FlatList滑動手勢結束時,同時設置其餘FlatList的偏移量保持同步,但這樣作的一個缺點是,沒法記錄每一個頁面的偏移量(應該能夠實現,只是demo中未實現),而後要解決的是每個FlatList初始化時,設置頭部元素偏移量的問題,這個須要等到該FlatLis組件DidMount的時候設置,否則不會生效,大致實現思路就是這些,若有疑問歡迎指出討論。數組
貼一下最終實現的源碼:github.com/zjkhiyori/r…性能