【发布时间】:2018-06-10 19:30:44
【问题描述】:
我在 react-native 应用程序中将图像和一些文本输入 (FloatLabelTextInput) 添加到 <View>。到目前为止,我没有太多运气使用 flex 属性在 y 轴上均匀地间隔图像和文本输入。
由于图像显示的高度太小,而剩余的 FloatLabelTextInput 在 y 轴上占据了太多的高度。
我已经在 Expo react-native 沙箱中测试并模拟了应用程序的视图,以供在此处使用我使用的相同 CSS 进行参考:
1 图像截断和文本输入占用过多高度: https://snack.expo.io/rydGFtHQG
2 图像显示正确,但 ext 输入占用过多高度: https://snack.expo.io/HyS1VYU7f
我也尝试将 flex 属性设置为整体 flex 的一部分, 但这不会调整视图中元素间距的宽度或高度。
问题:
如何使用 flex box 均匀分布 Image 和子元素?
提议的布局:(这是我的目标布局,Image 占据了完整的 View 宽度和 40% 的高度显示完整的图像,而 Image 下方的三个 TextInputs 又占据了 40%高度为 20px)
渲染的内容:(这是使用这种布局样式渲染的内容,Image 占 View 的 10% 左右,被截断。而剩下的三个 TextInput 占 View 的 50% 左右,并且每个高度约 50 像素,对于此布局来说太高了。
查看样式定义:
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection:"column",
//alignItems: 'center',
justifyContent: 'space-between',
backgroundColor: '#ecf0f1'
},
image: {
flex: 2/4,
resizeMode: 'contain',
width: 800,
height: 800,
},
floatLabelTextInput: {
flex: 2/4,
padding: 8,
},
});
【问题讨论】:
-
不要问我为什么,但似乎 flexDirection: 'row' 做了这件事:-O
-
我之前确实尝试过 flex direction:'row' 但这会导致图像和文本框出现在我的物理设备上的一行中。
-
我认为 Ian Mundy 已经确定了以下主要问题。您必须将图像的
flex属性设置为 1 才能解决此问题。另外,我建议设置width: auto并删除图像的height属性。结果:snack.expo.io/r1BKq-Umz(使用不同的图像)。 -
如果您使用普通的
TextInput而不是FloatLabelTextInput,您将不会遇到这些问题。例如,snack.expo.io/SyxtAWIQf . -
这是否与您的想法相似? snack.expo.io/BJAlhYImM
标签: css image react-native flexbox