0%
NavigatorIOS
NavigatorIOS
是一个包装UINavigationController
,能够实现一个导航堆栈, 且只能在iOS上使用的组件
- 它的工作原理与使用本地应用程序
UINavigationController
的效果完全相同,从UIKIt
提供相同的动画和行为
常用属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| style={{flex:1}}
barTintColor='yellow'
navigationBarHidden={false}
shadowHidden={false}
tintColor='black'
titleTextColor='blue'
translucent={true}
|
NavigatorIOS的使用
- 必须初始化路由:
initialRoute{}
- 注意:
component
,需要传入组件,自定义组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| initialRoute: { component: function, title: string, passPros: object, backButtonIcon: Image.propTypes.source, backButtonTitle: string, leftButtonIcon: Image.propTypes.soruce, leftButtonTitle: string, onLeftButtonPress: function, rightButtonIcon: Image.propTypes.soruce, rightButtonTitle: string, onRightButtonPress: function, }
|
1 2 3 4 5 6 7 8 9 10
| <NavigatorIOS initialRoute={ { component:JunNavigatorView, title: '首页', leftButtonTitle:'左按钮', rightButtonTitle:'跳转' } } />
|
页面间的跳转
- 获取Navigator,只有它才能跳转
- 只要是导航控制器下的组件,都可以通过props获取
this.props.navigator
- 界面跳转方法
1 2 3 4 5 6 7 8
| pust(route): pop(): popN(n): replace(route): replacePrevious(route): resetTo(route): popToTop():
|
1 2 3 4 5 6 7 8
| <Text onPress={()=>{ this.props.navigator.push({ component:JunTwoView, title:'第二页面' })
}} >点击跳转到第二个页面</Text>
|
Navigator
Navigator
很好解决了NavigatorIOS
不能跨平台和自定义的问题
- RN开发中通常使用
Navigator
- Navigator作用:只提供跳转功能,支持iOS,安卓
- 导航条需要自定义,需要导航条的界面,自己添加
只要一个控件,包装成Navigator就能获取跳转功能
Navigator导入问题
- 在0,43版本之前(包括0.43),
Navigator
在react-native
库中
- 从0.44版本开始
Navigator
就被移入了react-native-deprecated-custom-components
库中
- 使用前,先进入当前项目文件,安装Navigator所在的库
1 2 3 4 5
| yarn add react-native-deprecated-custom-components
npm install react-native-deprecated-custom-components --save
|
- 下载完成后,导入
1
| import {Navigator} from 'react-native-deprecated-custom-components'
|
Navigator的使用
initialRoute
:初始化路由
- 定义启动时加载的路由
- 路由是导航栏用来识别渲染场景的一个对象
1
| <Navigator initialRoute={{component: JunOneView}}/>
|
配置场景动画和手势
- 可选的函数, 设置跳转方向
- 会带有两个参数调用,一个是当前的路由,一个是当前的路由栈
- 返回一个场景配置对象
1 2 3
| _configureScene(route, routeStack) { return Navigator.SceneConfigs.PushFromLeft; }
|
1 2 3 4 5 6 7 8 9 10
| Navigator.SceneConfigs.PushFromRight (默认) Navigator.SceneConfigs.FloatFromRight Navigator.SceneConfigs.FloatFromLeft Navigator.SceneConfigs.FloatFromBottom Navigator.SceneConfigs.FloatFromBottomAndroid Navigator.SceneConfigs.FadeAndroid Navigator.SceneConfigs.HorizontalSwipeJump Navigator.SceneConfigs.HorizontalSwipeJumpFromRight Navigator.SceneConfigs.VerticalUpSwipeJump Navigator.SceneConfigs.VerticalDownSwipeJump
|
渲染指定路由的场景
1 2 3 4 5
| _renderScene(route, navigator) { return (<route.component navigator={navigator} {... route.props}/>) }
|
设置导航尺寸
其他属性或方法
1 2 3 4 5
| onDidFocus function
onWillFocus function
|
延展符
- 文中用到了一个操作符:
...
即为延展符
- 延展符的作用
- 遍历数组
- 遍历对象的属性,一个一个传值给下一个控件
1 2 3 4 5 6
| var arr1 = [1, 2, 3, 4, 5] var arr2 = [0] arr2.push(...arr1) console.log(arr2)
|
- 作用等同于
JavaScript
数组中的concat方法
- 区别在于
concat
只能作用于数组
1 2 3 4 5 6 7
| var arr1 = [1, 2, 3, 4, 5] var arr2 = [0]
arr2 = arr2.concat(arr1) console.log(arr2)
|