React Native中 react-navigation 2.0+的使用

先看个效果:


未命名.gif

demo结构:


image.png

Tab

利用react-navigation 2.0+ 的 createBottomTabNavigator创建


image.png
image.png

Nav

利用react-navigation 2.0+ 的 createStackNavigator创建


image.png

[图片上传中...(image.png-1e150-1537351456935-0)]

image.png

入口则设置


image.png

登录界面需要添加一个参数, 用于判断返回的方式(dismiss(), goBack())。


image.png

我的界面不需要导航栏,则需要添加一个参数;

image.png

但二级界面可以使用

static navigationOptions = ({navigation})=>{
  return {
     header: null
  }
};

关于设置导航栏的标题,或是左右测的Item等功能,处于一级界面的(Tab包裹下的)需要自定义导航栏(由于react-navigation 2.0+中,设置 static navigationOptions = ({navigation})=> { return { } };失效的,但二级界面可以使用。)

注意⚠️: 有处Bug:二级界面设置无导航栏
及代码:

 componentDidMount() {
    this.props.navigation.setParams({
       isHiddenNavBar: true,
    })
 }

没有效果,反而back不了,导航栏还存在!正好在解决这个问题。。。 哪位大佬有解决方案可以一同哦探讨,谢谢🙏

解决方案,Nav修改代码:

const navigationOptions = ({navigation})=>{
const options = {
  headerBackTitle: null,
  headerTintColor: '#fff', // 设置返回箭头/返回文字的颜色
  gesturesEnabled: true,
  headerTitleStyle: { textAlign: 'center', flex: 1, fontSize: 20, fontWeight: 'bold'},
  headerStyle: {
     // 如果想去掉安卓导航条底部阴影可以添加elevation: 0,
     // iOS下用shadowOpacity: 0。
     borderBottomWidth: 0,
     shadowOpacity: 0,
     elevation: 0,
     backgroundColor: '#ff2d55',
     paddingTop: Platform.OS === 'ios'? 0: StatusBar.currentHeight,
  },
};

const routes = navigation.state.routes;
const params = routes?navigation.state.routes[navigation.state.index].params : navigation.state.params;

let _header;
if (params !== undefined) {
   if (params.isHiddenNavBar === true) {
     _header = null;
   }
}

let _headerLeft;
if (navigation.state.routeName !== 'Tab') {
   // 自定义导航栏左侧返回组件
   _headerLeft = <NavItem
       onPress={()=>navigation.state.params?navigation.dismiss():navigation.goBack()}
  />
 }

return {
   ...options,
   header: _header,
   headerLeft: _headerLeft
 };
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容