J'essaie de faire en sorte que mon contenu commence à 100 pixels du haut dans React Native. J'ai essayé avec
const OFFSET = 100
const ScrollViewTest = (props) => (
<ScrollView
contentInset={{ top: OFFSET }}
contentOffset={{ y: OFFSET }}
>
<Text>Test</Text>
</ScrollView>
)
Mais lorsque je rends l'écran, il commence à 0 px, mais si je défile un peu, il défilera à 100px à partir du haut et y restera.
Il semble donc que React Native ne déclenche pas les propriétés contentOffset
et contentInset
à l'initialisation.
Comment puis-je réparer cela? J'ai également essayé de définir automaticallyAdjustContentInsets={false}
sans modification.
En outre, il semble que ces propriétés ne concernent que iOS. Existe-t-il des propriétés similaires pour Android?
Vous devriez utiliser la variable contentContainerStyle
1 propriété avec une marginTop
sur votre ScrollView.
En utilisant cette propriété, le conteneur sera enveloppé par vos enfants (ce que je crois être ce que vous voulez dans ce cas-ci) et l’avantage supplémentaire de travailler à la fois sur iOS et sur Android.
C'est à dire.
const OFFSET = 100
const ScrollViewTest = (props) => (
<ScrollView
contentContainerStyle={{ marginTop: OFFSET }}
>
<Text>Test</Text>
</ScrollView>
)
Lorsque j'essaie d'appeler la méthode scrollTo de composantDidMount, elle ne défile pas. Je dois utiliser la solution de contournement avec setTimeout pour que cela fonctionne:
componentDidMount() {
setTimeout(() => this.refs._scrollView.scrollTo({ x: 100, y: 0 }) , 0);
}
componentDidMount(){
if(Platform.OS==='ios'){
this.refs._scrollView.scrollToOffset({animated:false,offset:-OFFSET});
}
}
render(){
return(
<ScrollView
ref="_scrollView"
contentInset={{top: OFFSET}}
...>
...
</ScrollView>
)
}
effet de rembourrage:
const OFFSET = 100
const ScrollViewTest = (props) => (
<ScrollView>
<View style={{ height: OFFSET }} />
<Text>Test</Text>
</ScrollView>
)
effet d'en-tête:
const OFFSET = 100
const ScrollViewTest = (props) => (
<View style={{ paddingTop: OFFSET }}>
<ScrollView>
<Text>Test</Text>
</ScrollView>
</View >
)