我是新手对iOS(不是编程)的原生和新手做出反应所以请原谅我这个问题是否很简单。我试图从一个视图导航到另一个视图(带有转换),但它们没有关联,因此我不需要后退导航。我实际上根本没有导航栏。使用Navigator组件时,似乎根本不支持这一点。我不确定是否有单独的方法来做到这一点,但我没有实现自己的黑客,我无法弄明白。
如果我使用导航器组件并继续推动视图,那么它只是将它们全部保存在内存中,我不希望这样。我可以从一个视图转换到另一个视图然后弹出,但在这种情况下我可能最终会转向错误的视图。我也可以替换视图,但似乎不允许转换。
给你一个场景,想象一下:
所以通过这个例子你可以看到没有办法弹出,因为如果你在登录屏幕上并进入注册屏幕,然后想要去检索密码屏幕然后弹出只是根本不起作用。我不希望屏幕上有任何导航控件,我只是希望能够在这些屏幕之间平滑过渡。
现在我能够找到一种方法来实现这一点,但是我必须在Navigator类中添加一个方法并使用一些核心方法破解代码,这看起来根本不是一个好主意,但这里是代码(注意这实际上只是一个黑客,看看它是否会起作用):
Navigator.prototype.pushWithUnmount = function(route) {
var activeLength = this.state.presentedIndex + 1;
var activeStack = this.state.routeStack.slice(0, activeLength);
var activeAnimationConfigStack = this.state.sceneConfigStack.slice(0, activeLength);
var nextStack = activeStack.concat([route]);
var destIndex = nextStack.length - 1;
var nextAnimationConfigStack = activeAnimationConfigStack.concat([
this.props.configureScene(route),
]);
this._emitWillFocus(nextStack[destIndex]);
this.setState({
routeStack: nextStack,
sceneConfigStack: nextAnimationConfigStack,
}, () => {
this._enableScene(destIndex);
this._transitionTo(
destIndex,
null, // default velocity
null, // no spring jumping
() => {
this.replaceAtIndex(nextStack[destIndex], 0);
this.setState({
presentedIndex: 0,
});
}
);
});
}
通过使用上面提供的代码,我现在能够:
this.props.navigator.pushWithUnmount({ component: SomeComponent });
使用此代码,视图将通过转换推送到堆栈,旧视图在完成时将卸载。
请告诉我,我做错了,有更好的方法吗?
答案 0 :(得分:0)
使用React Native的默认路由器非常有限。我查看了React Native Router Flux。我们几周前刚刚在我们的产品中切换到它,并且非常喜欢它。它完全符合您的要求。