最近用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…性能