# react-native-head-tab-view
**Repository Path**: yaojinye/react-native-head-tab-view
## Basic Information
- **Project Name**: react-native-head-tab-view
- **Description**: 一个带有头部组件,可以整体上下滑动的标签页组件
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-06-17
- **Last Updated**: 2021-06-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# React Native Tab View
一个带有头部组件,可以整体上下滑动的标签页组件
## 功能
- 左右滑动标签页
- 可定制的Tabbar
- 标签页可以添加头部,并且整体上下滑动
- 兼容iOS和Android
## Demo
iOS效果图

Android效果图:

## 使用
```sh
yarn add react-native-head-tab-view
or
npm install react-native-head-tab-view --save
```
## 简例
```
import { HPageViewHoc, TabView } from 'react-native-head-tab-view'
_renderScene = (sceneProps: { item: string, index: number }) => {
const { item } = sceneProps;
if (item == 'ScrollView') {
return
} else if (item == 'FlatList') {
return
} else if (item == 'SectionList') {
return
}
return null;
}
render() {
return (
{this._renderNavBar()}
{ return 180 }}
renderScrollHeader={()=>}
onChangeTab={this.onChangeTab}
/>
)
}
```
更加完善的demo请点击demo
#### Props
##### `tabs` (`required`) _(tabs :string[])_
此组件的数据源,为各个标签页的名字组成的数组
可配合`tabNameConvert`使用
Example:
```js
```
##### `averageTab` _(boolean)_
Tabbar组件内元素是否平分
`true` : 以Tabbar宽度平分所有元素
`false` : 根据Tabbar元素的长度自动伸展,可左右滑动
Example:
```js
```
##### `renderScene` (`required`) _(renderScene :(info: TabViewItemInfo) => React.ReactElement | null | undefined)_
渲染各个标签子页面的方法,传入参数遵从TabViewItemInfo协议包含以下参数
- item _(string)_ : 标签的名字(`tabs`数组的其中一个元素)
- index _(number)_ : 标签页的序号 ,从0开始排序
*下面的参数是使用了`renderScrollHeader`才有(这些参数一般都用不上,只需要全部传递给HPageViewHoc)*
- isActive _(boolean)_ : 是否是当前活跃标签页
- containerTrans _(Animated.Value)_ : 统管全局纵向动画对象
- makeHeaderHeight _(() => number)_ : 获取renderScrollHeader的高度方法
- addListener _((instance: any, eventName: string, callback: function) => void)_ : 标签页添加整个组件的事件监听方法,instance:this , eventName:事件名,callback:事件回调
- removeListener _((instance: any, eventName: string, callback: function) => void)_ : 标签页移除整个组件的事件监听方法
- scenePageDidDrag _((index:number)=>void)_ : 标签页页面被拖拽时回调方法
- expectHeight _(number)_ : 整个组件上下滑动时,期望标签页所拥有的内容高度(用于`HPageViewHoc`中计算补位视图高度)
Example:
```js
{
const {item} = sceneProps
if (item == 'ScrollView') {
return
} else if (item == 'FlatList') {
return
} else if (item == 'SectionList') {
return
}
return null;
}}
/>
```
##### `renderScrollHeader` _(React.ComponentType | React.ReactElement | null)_
渲染标签页组件共有的头部,可整体滑动
```js
{ return 180 }}
/>
```
##### `makeHeaderHeight` (`如果有renderScrollHeader时,必须实现此方法`)
返回renderScrollHeader组件的高度
```js
renderScrollHeader={()=>}
```
##### `renderHeader` _(React.ComponentType | React.ReactElement | null)_
渲染头部组件(在Tabbar的下方)
##### `renderFooter` _(React.ComponentType | React.ReactElement | null)_
渲染底部组件
##### `initialPage` _(number)_
初始显示的标签页序号 (默认是0)
##### `preInitSceneNum` _(number)_
预加载的屏幕数量 (默认是0)
##### `renderTabBar` _(React.ComponentType | React.ReactElement | null)_
自定义Tabbar的渲染方法
##### `onChangeTab` _((value: ChangeTabProperties): void)_
```js
{ console.log('from:'+from+'-to:'+curIndex) }}
/>
```
##### `onScroll` _((value: number): void)_
当前标签页左右滑动的进度回调,value:当前滚动的距离/总共可滚动距离
##### `locked` _(boolean)_
是否允许水平滑动
##### `tabbarStyle` _(StyleProp)_
tabbar的样式
##### `extraData` _(any)_
用于重新渲染组件