#android #ios #react-native #react-navigation #react-native-reanimated-v2
Вопрос:
Я провел последний день, пытаясь выяснить, как реализовать простой переход на экран с плавным переходом с помощью навигации по реакции, но я не могу найти способ заставить его работать с навигатором на нижней вкладке. Кто-нибудь может мне помочь? Я много читал документы, но анимации, похоже, доступны только с навигатором стека.
Можете ли вы заставить переходы работать над этой демонстрацией закусок?
Комментарии:
1. Если мой ответ был полезен, пожалуйста, поделитесь своими отзывами.
2. Так и было, спасибо. У меня просто еще недостаточно репутации, чтобы голосовать.
Ответ №1:
Просто создайте Animated.View
и прикрепите его к своим экранам.
const FadeHomeScreen = (props) => (
<FadeInView>
<HomeScreen {...props} />
</FadeInView>
);
затем используйте это для Tab.Screen
<Tab.Screen name="Home" component={FadeHomeScreen} />
и просто добавьте unmountOnBlur: true
в screenOptions
const screenOptions = {
unmountOnBlur: true,
headerShown: false,
};
<Tab.Navigator {...{ screenOptions }}>
Code: https://snack.expo.dev/@fanish/native-stack-navigator-|-react-navigation
Вы также можете использовать react-native-reanimated
для создания <FadeInView />
компонента
Комментарии:
1. Огромное спасибо. Однако есть ли способ поддерживать состояние на выцветшей странице? Включение отключения блокировки приводит к тому, что пользователь теряет всю историю навигации. Существует ли подход, который обеспечивает одно и то же поведение, но сохраняет всю логику состояний?
2. Да, есть способ сделать это, но вам придется использовать
focus
прослушиватель событий. Запуск действия с помощью прослушивателя событий «фокус» и вызоваFadeAnimation
.3. заставил это работать с помощью крючка useFocusEffect snack.expo.dev/@pedrosousa/fade-animation-between-bottom-tabs . Теперь следующим шагом на самом деле является реализация анимации затухания, которая переключается между содержимым экрана, а не между полем rootviewbackground (в данном случае пустой белый экран).
4. Добавьте это свойство
<Tab.Navigator {...{ screenOptions,sceneContainerStyle }}>
иconst sceneContainerStyle={ backgroundColor:'#95a5a6' }
Вы не увидите белого экрана.