В зависимости от вашей версии стекового навигатора, вам необходимо проверить реквизиты, которые вы получите. Прежде всего, передайте функцию, возвращающую элемент в опцию заголовка, чтобы получить реквизиты:
SomeScreen.navigationOptions = {
header: props => <Header {...props} />
};
Если вы находитесь на react-navigation-stack@2.x
(альфа), вы получите реквизит с именемscene
. Это объект, содержащий свойство progress
, которое имеет 3 свойства, которые являются реанимированными узлами.
current
: представляет ход экрана, в котором заголовок находится в диапазоне отОт 0 до 1, где 0 означает, что экран полностью скрыт, а 1 означает, что экран полностью показан. next
: аналогично текущему, но для следующего экрана в стеке. может быть undefined
при отсутствии следующего экрана previous
: аналогично текущему, но для предыдущего экрана в стеке. может быть undefined
при отсутствии предыдущего экрана
Вы можете интерполировать эти значения для анимации вашего вида. Например, предположим, что вы хотите анимировать непрозрачность, начиная с 0,5 и до 1, когда появляется экран:
import Animated from "react-native-reanimated";
// ...
<Animated.Text
style={{
opacity: Animated.interpolate(scene.progress.current, {
inputRange: [0, 1],
outputRange: [0.5, 1]
})
}}
/>;
Если вы используете react-navigation-stack@1.x
, вы получаете реквизит с именем position
. Это анимированный узел, который представляет текущую позицию стека (в диапазоне от 0 до текущего индекса). Вы можете интерполировать на нем, чтобы оживить ваш заголовок. Это может быть немного сложно, поэтому вам придется поиграться.
Например, скажем, вы хотите анимировать непрозрачность, начиная с 0,5 и до 1, когда появляется экран:
ПРИМЕЧАНИЕ. Я не проверял этот код, поэтому код может быть неправильным. Так что вам придется поиграть с этим.
import { Animated } from "react-native";
// ...
<Animated.Text
style={{
opacity: position.interpolate({
inputRange: [index - 1, index],
outputRange: [0.5, 1]
})
}}
/>;