Вы можете добавить listener
на Animated.event , который позволит вам получить значение вашего y
:
<Animated.ScrollView
scrollEventThrottle={16}
onScroll={Animated.event(
[{ nativeEvent: { contentOffset: { y: this.AnimatedHeaderValue }}}],
{
useNativeDriver: true,
listener: event => {
const offsetY = event.nativeEvent.contentOffset.y
this.onScrollChange(offsetY)
}
},
)}
>
<ImageBackground
style={{ width: 375, height: 400 }}
source={require('./assets/pizza.jpg')}
/>
</Animated.ScrollView>
Здесь вам просто нужноопределите onScrollChange
в вашем компоненте.Поскольку ваш marginTop
находится на верхнем уровне <App />
, изменить его будет немного сложно, поэтому вы можете использовать Redux или Context для обновления и использования этого значения.
Вы также можете поставить поле на том же уровне и использовать состояние, но это заставит вас делать то же самое для каждой страницы в зависимости от вашей архитектуры.
Поскольку вам нужно изменить во время выполненияtabBarOptions
, вам потребуется создать и предоставить пользовательский tabBarComponent
для вашего навигатора:
const AppTabNavigator = createMaterialTopTabNavigator(
{
Home: {
screen: HomeScreen,
navigationOptions: {
header: null,
tabBarVisible: true,
activeTintColor: '#e91e63',
},
},
},
{
tabBarComponent: CustomTabBar
},
)
Этот компонент расширит компонент по умолчанию, используемый реагирующей навигацией, и подключится кstate.
import React from 'react'
import { MaterialTopTabBar } from 'react-navigation'
export default ({ hasMargin, ...props }) => (
<MaterialTopTabBar
{...props}
showLabel
labelStyle={{
fontSize: 15,
color: 'white',
}}
style={{
backgroundColor: 'rgba(22, 22, 22, 0)',
position: 'absolute',
top: Dimensions.get('window').height-tabBarHeight,
left: 0,
right: 0,
marginTop: hashMargin ? 45 : 0,
}}
/>
)
Проблема в том, что у вас не будет переменной hasMargin
.Вам нужно будет либо выбрать connect
ваш компонент , используя Redux , либо использовать контекст React .И то, и другое требует некоторого понимания и настройки, поэтому вам, возможно, придется немного ознакомиться с ними.Как только это будет сделано, определите onScrollChange
, чтобы изменить свой контекст или отправить действие с избыточностью.