react-native新导航组件react-navigation详解
react-navigation react-navigation是今年1月份新出的一款React-native导航组件,才几个月github就三千多star,半官方身份,fb推荐使用,据称性能和效果跟原生差不多. 可能是react-native导航组件的未来主流. 但现在还是beta版本(最新 有问题找issues,基本上坑都在这里. 官方文档 主要构成按使用形式主要分三部分: 1 StackNavigator 导航栏 API: // 注册导航
const Navs = StackNavigator({
Home: { screen: Tabs },HomeTwo: {
screen: HomeTwo,// 必须,其他都是非必须
path:'app/homeTwo',使用url导航时用到,如 web app 和 Deep Linking
navigationOptions: {} // 此处设置了,会覆盖组件内的`static navigationOptions`设置. 具体参数详见下文
},HomeThree: { screen: HomeThree },HomeFour: { screen: HomeFour }
},{
initialRouteName: 'Home',161);">// 默认显示界面
navigationOptions: { // 屏幕导航的默认选项,也可以在组件内用 static navigationOptions 设置(会覆盖此处的设置)
header: { // 导航栏相关设置项
backTitle: '返回',161);">// 左上角返回键文字
style: {
backgroundColor: '#fff'
},titleStyle: {
color: 'green'
}
},cardStack: {
gesturesEnabled: true
}
},mode: 'card',161);">// 页面切换模式,左右是card(相当于iOS中的push效果),上下是modal(相当于iOS中的modal效果)
headerMode: 'screen',161);">// 导航栏的显示模式,screen: 有渐变透明效果,float: 无透明效果,none: 隐藏导航栏
onTransitionStart: ()=>{ console.log('导航栏切换开始'); },161);">// 回调
onTransitionEnd: '导航栏切换结束'); } // 回调
});
navigationOptions参数:
在组件中设置 static navigationOptions = {
title: 'homeThree',header: (navigation,defaultHeader) => ({
...defaultHeader,161);">// 默认预设
visible: true // 覆盖预设中的此项
}),cardStack: {
gesturesEnabled: false // 是否可以右滑返回
}
};
// 或这样
static navigationOptions = {
// title: 'Two',// 写死标题
title: (// 动态标题
if (navigation.state.params.isSelected) {
return `${navigation.state.params.name}选中`;
} else {
${navigation.state.params.name}没选中`;
}
},102);">{ state,setParams,goBack }) => {
let right;
if (state.params.isSelected) {
right = (<Button title="取消" onPress={() => setParams({ isSelected: false })}/>);
} else {
right = ("选择" onPress={() => setParams({ isSelected: true })}/>);
}
let left = ("返回" onPress={() => goBack()}/>);
let visible = false; // 是否显示导航栏
return { right,left,visible };
},161);">// header: {left: <Button title="返回"/>},
};
StackNavigatorConfig
initialRouteName : 设置默认的页面组件,必须是上面已注册的页面组件initialRouteParams : 初始路由的参数navigationOptions : 屏幕导航的默认选项
onTransitionEnd : 页面切换结束时的回调函数TabNavigator 标签栏// 注册tabs
const Tabs = TabNavigator({
Home: {
screen: Home,navigationOptions: { // 也可以写在组件的static navigationOptions内
tabBar: {
label: '首页',icon: ({tintColor}) => (<Image source={require('./app/images/home.png')} style={[{tintColor: tintColor},styles.icon]}/>),},}
},Bill: {
screen: Bill,navigationOptions: {
tabBar: {
label: '账单',152);">'./app/images/bill.png')} style={[{tintColor: tintColor},Me: {
screen: Me,152);">'我',152);">'./app/images/me.png')} style={[{tintColor: tintColor},}
}
},{
animationEnabled: false,// 切换页面时是否有动画效果
tabBarPosition: 'bottom',// 显示在底端,android 默认是显示在页面顶端的
swipeEnabled: false,// 是否可以左右滑动切换tab
backBehavior: 'none',// 按 back 键是否跳转到第一个Tab(首页), none 为不跳转
tabBarOptions: {
activeTintColor: '#ff8500',// 文字和图片选中颜色
inactiveTintColor: '#999',// 文字和图片未选中颜色
showIcon: true,// android 默认不显示 icon,需要设置为 true 才会显示
indicatorStyle: {
height: 0 // 如TabBar下面显示有一条线,可以设高度为0后隐藏
},style: {
backgroundColor: '#fff',// TabBar 背景色
// height: 44
},labelStyle: {
fontSize: 10,// 文字大小
},});
DrawerNavigator抽屉const DrawerNav = DrawerNavigator({
Home: { screen: Home }, Bill: { screen: Bill },22);"> Me: { screen: Me },22);"> HomeTwo: { screen: HomeTwo },22);"> HomeThree: { screen: HomeThree },22);"> HomeFour: { screen: HomeFour },22);"> BillTwo: { screen: BillTwo },22);"> BillThree: { screen: BillThree }
},{
drawerWidth: 200,161);">// 抽屉宽
drawerPosition: 'left',161);">// 抽屉在左边还是右边
// contentComponent: CustomDrawerContentComponent,// 自定义抽屉组件
contentOptions: {
initialRouteName: Home,161);">// 默认页面组件
activeTintColor: 'white',161);">// 选中文字颜色
activeBackgroundColor: // 选中背景颜色
inactiveTintColor: '#666',161);">// 未选中文字颜色
inactiveBackgroundColor: // 未选中背景颜色
style: { // 样式
}
}
});
navigation 在
Navigation Actions
Deep Link 其他app或浏览器使用url打开次app并进入指定页面. 如浏览器输入url iOS版设置
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [RCTLinkingManager application:application openURL:url
sourceApplication:sourceApplication annotation:annotation];
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |