react-native scroll-head-tab-view
常见的嵌套标签页,头部公共视图跟随着每个Tab的滑动,TabBar到达一定位置吸附在顶部。
实现效果:
react-native开发者几乎都接触过react-native-scrollable-tab-view,用来实现tab切换,既然叫做ScrollHeadTabView,肯定是跟它脱不了干系。因为我们只需在其上增加头部视图滚动、TabBar吸附的效果,我个人觉得没必要再费力气去做别人已经做得很好的事情了,因此就基于scrollable-tab-view来完成我们的ScrollHeadTabView。
首先我们需要熟悉scrollable-tab-view的核心代码,主要是state、tab渲染这部分。我们需要添加ScrollHeader,管理每个Tab的offsetY,以及实现TabBar吸附。
添加header:
header的高度由外部计算headerHeight,内部再用一层View包装,然后使用containerOffsetY来控制头部上下平移。
处理containerOffsetY
修改了原来的_composeScenes(处理每个tab视图的方法),我们给每个tab传递了额外的参数,最核心的是传递containerOffsetY和计算Tab的高度sceneHeight。
每个Tab是这样使用这些参数的,sceneHeight给那些内容不足容器高度计算底部padding,当前Tab滑动时改变containerOffsetY的值,这里需要主要注意的就是每个Tab的onScroll事件监听方法是需要动态改变的。
因为上面这些UI处理逻辑对于每个Tab来说都是相同的,因此我们可以添加一个HOC,处理RN中的scrollable视图。每个Tab最外层必须是经过HOC处理过的Flatlist或ScrollView。
example
这里的ScrollView是被处理过的