#react-native #mobile-application #touchableopacity
Вопрос:
Я пытаюсь сделать так , чтобы эти два компонента карты отображались рядом друг с другом в ряд, как показано здесь, что, похоже, работает, когда я оборачиваю компонент в a View
, но выглядит так с кучей ненужного пространства между ними, когда я пытаюсь сделать это с a TouchableOpacity
.
Вот мой код для компонента карты (в настоящее TouchableOpacity
время включен, а View
оболочка закомментирована):
export const NavCard = ({
title,
height = 200,
onPress = null,
background = null,
}) => {
return (
<TouchableOpacity
onPress={onPress}
style={[
{ height: height },
background ? styles.cardImage : styles.noImage,
]}
>
{/* <View
style={[
{ height: height },
background ? styles.cardImage : styles.noImage,
]}
> */}
<Image
source={background}
resizeMode="cover"
style={{
height: height,
width: "100%",
borderRadius: 15,
position: "absolute",
top: 0,
right: 0,
}}
/>
<View style={{ padding: 15 }}>
<Text style={styles.title}>{title}</Text>
<Image
style={styles.arrow}
source={require("../assets/arrow-right.png")}
/>
</View>
{/* </View> */}
</TouchableOpacity>
);
};
const styles = StyleSheet.create({
cardImage: {
flexGrow: 1,
margin: "2%",
borderRadius: 15,
},
noImage: {
flexGrow: 1,
margin: "2%",
borderRadius: 15,
backgroundColor: "#333436",
},
title: {
fontSize: 24,
color: "#E4E5EA",
fontWeight: "bold",
shadowColor: "#000000",
shadowOffset: { width: 2, height: 2 },
shadowOpacity: 1,
shadowRadius: 4,
},
arrow: {
width: 15,
height: 15,
resizeMode: "contain",
position: "absolute",
top: 22,
right: 20,
},
});
Вот код для экрана:
const HomeScreen = ({ navigation }) => {
return (
<View style={styles.container}>
<View style={styles.rowContainer}>
<NavCard
title="Map"
height={180}
onPress={() => navigation.navigate("Map")}
background={require("../assets/pvdx1.png")}
></NavCard>
<NavCard
title="CAD"
height={180}
background={require("../assets/pvdx1.png")}
onPress={() => navigation.navigate("CADScreen")}
></NavCard>
</View>
</View>
);
};
const styles = StyleSheet.create({
container: {
paddingTop: 10,
padding: 4,
flex: 1,
},
rowContainer: {
flexDirection: "row",
justifyContent: "space-between",
},
body: {
paddingTop: 10,
fontSize: 16,
color: "#E4E5EA",
},
});
export default HomeScreen
Кто-нибудь знает, почему это портит ширину обоих компонентов, если стили View
и TouchableOpacity
точно такие же? Я использую React Native.
Изменить: Обновлено для использования Image
вместо ImageBackground
(код теперь отражает это), но результат тот же.
Комментарии:
1. Пожалуйста, проверьте после удаления
justifyContent: "space-between"
на рабочем столе. дайте мне знать, если у вас возникнут какие-либо другие вопросы.2. @JohnOcean Это просто избавляет от пространства между двумя картами и прижимает их друг к другу, выровненными справа. Я пытаюсь заставить его вести себя так же, как когда я использую <Вид>, где между ними есть пространство, но обе карты расширяются, чтобы заполнить всю ширину (кроме полей между ними).
Ответ №1:
Вероятно , проблема в вашем <ImageBackground />
, потому что я заменил его на родной <Image />
, и он работает. вот как выглядит мое изображение, вы можете сравнить его с вашим кодом:
<Image
style={{
height: height,
borderRadius: 15,
position: "absolute",
top: 0,
right: 0,
width: "100%"
}}
resizeMode="cover"
source={{ uri: "https://via.placeholder.com/250x150" }}
/>
Комментарии:
1. Я изменил свой
ImageBackground
в точности так, как описано выше, но все равно получается очень далеко друг от друга.2. @sophosn ну, в ссылке, которую я прикрепил, я использую ваш точный код. вы проверили ссылку?
3. да, на самом деле я также прокомментировал весь свой другой код, чтобы просто включить rowContainer и навигационные карты на этом экране, но он все еще отображается с гигантским пробелом посередине.
4. Я также точно скопировал и вставил ваш код, но результат тот же. Может быть, проблема в чем-то другом?
Ответ №2:
Я понял проблему: я импортировал TouchableOpacity
из react-native-gesture-handler
вместо react-native
. Изменил его, и он работает просто отлично.