Я провел небольшое тестирование, но не смог найти безболезненного решения.
Это первое решение работает только в том случае, если экран, к которому вы переходите, является initalRouteName
в stackNavigator. Если он используется на любом другом экране, он отключит эффект постепенного появления на этом экране.
Просто добавьте экран, к которому вы переходите, обратно к тому, который вы предоставляете screensChosenConfig
:
sceneProps.scene.route.routeName === "Account" ||
sceneProps.scene.route.routeName === "ChangePassword"||
sceneProps.scene.route.routeName ==="ProfileScreen"
? screensChosenConfig
: standardScreensConfig
Вот как это происходит:
ProfileScreen
появляется без анимации.
Анимация SecondScreen
в.
Анимация ThirdScreen
в.
Внутри сфокусированного экрана, который вы вызываете, navigate("ProfileScreen")
ProfileScreen
появляется без анимации затухания других экранов.
EDIT.
Если вам нужночтобы вернуться к другому экрану, это НЕ initialRouteName, тестируемое мною решение заключалось в том, чтобы добавить на КАЖДОМ экране стека это componentDidMount
:
componentDidMount = () => {
this.props.navigation.setParams({ animatedIn: true })
}
С этим я мог просто проверить его внутриtransitionSpec
:
transitionSpec:
sceneProps.scene.route.routeName === "Account" ||
sceneProps.scene.route.routeName === "ChangePassword"||
(sceneProps.scene.route.params&&sceneProps.scene.route.params.animatedIn)
? screensChosenConfig
: standardScreensConfig,
Обратите внимание, что это отключит анимацию для простого goBack () через заголовок