react-native scroll-head-tab-view
效果:常见的嵌套标签页,头部公共视图跟随着每个Tab的滑动,TabBar到达一定位置吸附在顶部。
时隔一年多再次接触到这个知识点🤣,之前的实现方案不太完美,效果不尽如人意,虽然后面不了了之,但是欠的债总是要还的,于是重新面对这个技术点。
RN和开发者都在成长,因此这次的实现思路较上次改良很多,目前没发现明显的槽点。
效果如下:
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。