#css #reactjs #react-native #react-native-ios
#css #reactjs #react-native #react-native-ios
Вопрос:
Я пытаюсь создать ленту новостей с использованием React Native FlatList
. Я хочу, чтобы он был похож на ленту Tik Tok, каждый элемент в FlatList
которой занимает весь экран.
Прямо сейчас он имеет правильный макет, который я хочу, но проблема в том, что лента не прокручивается.
По какой-то причине FlatList
он становится недоступным для прокрутки, если я установил для дочернего элемента значение have height: '100%'
. Когда я меняю его на height: 1000
, он прокручивается, но я не хочу жестко кодировать высоту.
Я был бы признателен, если вы предложите какую-либо помощь вообще!
Вот компонент feed:
const Feed = () => {
const renderItem = ({ item, index }) => {
return (
<FeedItem
id={item.id.toString()}
videoUrl={item.videoUrl}
index={index}
/>
)
}
return (
<FlatList
style={styles.container}
contentContainerStyle={styles.children}
data={someData}
renderItem={renderItem}
keyExtractor={(item, index) => item.id.toString()}
/>
);
}
// styles
const styles = StyleSheet.create({
container: {
display: 'flex',
flexDirection: 'column',
height: '100%'
},
children: {
flexGrow: 1,
}
})
И вот каждый элемент в ленте:
import { Video } from 'expo-av';
const FeedItem = ({ id, videoUrl, index }) => {
return (
<Video
source={{ uri: videoUrl }}
style={styles.backgroundVideo}
/>
)
}
const styles = StyleSheet.create({
backgroundVideo: {
height: '100%' // FIXME: problematic
},
});
Комментарии:
1. Вы пробовали
Dimensions.get('window').height;
?2. Да, я пробовал это. Но это не учитывает нижнюю навигацию. Я хочу, чтобы он занимал экран, не перекрываясь с панелью навигации.
3. Привет, столкнулся с этой точной проблемой. Вы, случайно, не нашли способ решить эту проблему?
4. Эй, Чого, в итоге я использовал ViewPager из @react-native-community / viewpager. Это что-то вроде <ViewPager style={{flex:1}} />
Ответ №1:
Это может помочь
const FeedItem = ({ id, videoUrl, index }) => {
return (
<View style={{flex:1}}>
<Video
source={{ uri: videoUrl }}
style={styles.videoStyle}
/>
</View>
)
}
const styles = StyleSheet.create({
videoStyle: {
height: Screen.height, // Remove this
width: Screen.width
},
});
Комментарии:
1. Но если я это сделаю, видео вообще не будет видно (нулевая высота). Как мне это исправить?
2. Я пробовал использовать размер экрана. Единственное, что мне не нравится, это то, что видео будет перекрываться нижней панелью навигации. Вот почему я попробовал height: 100%, чтобы он заполнил оставшийся экран.