J'ai (ce que je pensais être) un simple FlatList
qui rend une liste de Cards
(code ci-dessous)
Problème: La liste rend la liste, mais ne faites pas défiler pour afficher complètement le dernier élément de la liste, OR au contenu ci-dessous FlatList
Qu'est-ce que j'ai essayé: essentiellement tout dans les questions connexes SO:
FlatList
dans un View
ou un ScrollView
ou les deuxstyle={{flex: 1}}
Au FlatList
ou wrappers (cette cause ** tout * contenu * de disparaître)Des idées?
<FlatList
data={props.filteredProducts}
renderItem={({item}) => (
<TouchableOpacity onPress={() => props.addItemToCart(item)}>
<Card
featuredTitle={item.key}
image={require('../assets/icon.png')}
/>
</TouchableOpacity>
)}
keyExtractor={item => item.key}
ListHeaderComponent={
<SearchBar />
}
/>
...
<Other Stuff>
Je ne sais pas si votre scénario est exactement le même que celui que j'ai rencontré sur un projet il y a quelques mois, mais j'ai remarqué que je devais ajouter un margin/padding
(dépend de ce que vous préférez) de soulever le fond du conteneur défilé. C'était généralement parce qu'un conteneur parent semblait interférer avec le style de l'élément défilé.
Avez-vous essayé d'ajouter flexGrow: 1
à votre style à la place de flex
?
Ajouter style={{flex: 1}}
Pour chaque élément de vue qui est un parent pour la flambée.
Mon cas est un peu différent, en ce que j'ai utilisé FlatList
intérieure feuille de fond fournie par reanimated-bottom-sheet
paquet. Mais le problème était le même: le défilement n'a pas montré le dernier article correctement.
La façon dont je l'ai fait était j'ai calculé et défini la hauteur de la vue qui incluait le FlatList
. Pour que cela aient l'air mieux quand il y a du bas inset, j'ai donné plus de marge inférieure au dernier élément du FlatList
en faisant comme ceci:
<FlatList
data={results}
keyExtractor={(item) => item.name}
scrollEnabled={bottomSheetIndex == 1 ? true : false}
renderItem={({ item }) =>
<LocationInfo
bottom={results[results.length - 1].id == item.id ? insets.bottom : 0}
result={item}
wait={waitState[item.id]}
bsIndex={bottomSheetIndex}
/>
}
/>
const LocationInfo = ({ bottom, result, wait, bsIndex }) => {
return (
<View style={[styles.container, { paddingBottom: bottom }]}>
...
pour embarquer, voir react-native-safe-area-context
.
ajouter Flex: 1 à mon article de rendu travaillé pour moi
<FlatList
data={data}
renderItem={({ item }) => (
<ListItem
onPress={() => console.log('ok')}
bottomDivider
rightTitle={
<Divider style={{ marginBottom: 4, backgroundColor: item.status, width: '50%', height: '11%', borderRadius: 10 }} />
}
titleProps={{ numberOfLines: 1 }}
rightSubtitle={item.date}
rightTitleStyle={{ fontFamily: 'poppins' }}
rightSubtitleStyle={{ fontFamily: 'poppins' }}
titleStyle={{ fontFamily: 'poppins' }}
subtitleStyle={{ fontFamily: 'poppins' }}
title={item.device}
subtitle={item.type}
leftAvatar={{ source: item.icon, rounded: false }}
**style={{ flex: 1 }}**
/>
)}
keyExtractor={item => item._id}
ListHeaderComponent={renderHeader}
ListFooterComponent={renderFooter}
onEndReached={handleLoadMore}
onEndReachedThreshold={0.2}
/>
Supprimer Flex: 1 de la flatliste et ne laissez que la vue parent.