我试图在React Native中根据项目列表进行两列布局.只有当我定义了项目的宽度时,它才起作用,我只想定义父级宽度的一个百分比(0.5表示2列布局,但0.25表示4列布局).这能做到吗?

export default class App extends Component {
  render() {
    return (
      <View style={[styles.container, {width:width}]}>
        <View style={styles.item}><Text>{'item1'}</Text></View>
        <View style={styles.item}><Text>{'item2'}</Text></View>
        <View style={styles.item}><Text>{'item3'}</Text></View>
        <View style={styles.item}><Text>{'item4'}</Text></View>
        <View style={styles.item}><Text>{'item4'}</Text></View>
        <View style={styles.item}><Text>{'item5'}</Text></View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    flexDirection: 'row',
    flexWrap: 'wrap',
  },
  item :{
    flex: 0.5, //why this doesnt work???
    // width: 150, //using fixed item width instead of flex: 0.5 works
    height: 100,
    padding: 10,
    backgroundColor: 'red',
    // flexGrow: 1,
    // flexShrink: 0,
  }
});

你可以在这里玩:https://snack.expo.io/SyBjQuRxm

Css工作当量:https://codepen.io/klamping/pen/WvvgBX?editors=110

显然,我可以为每一列创建一个容器,但这不是重点:

render() {
    return (
      <View style={[styles.container, {width:width}]}>
        <View style={styles.column1}>
             <View style={styles.item}><Text>{'item1'}</Text></View>
             <View style={styles.item}><Text>{'item2'}</Text></View>
             <View style={styles.item}><Text>{'item3'}</Text></View>
        </View>
        <View style={styles.column2}>
             <View style={styles.item}><Text>{'item4'}</Text></View>
             <View style={styles.item}><Text>{'item4'}</Text></View>
             <View style={styles.item}><Text>{'item5'}</Text></View>
        </View>
      </View>
    );
  }

推荐答案

如果对宽度使用百分比值,则可以:

<View style={styles.container}>
  <View style={styles.item}>
    ...
  </View>
</View>

const styles = StyleSheet.create({
  container: {
    flex: 1,
    flexDirection: 'row',
    flexWrap: 'wrap',
    alignItems: 'flex-start' // if you want to fill rows left to right
  },
  item: {
    width: '50%' // is 50% of container width
  }
})

React-native相关问答推荐

@testing-library/react-native -> 渲染 -> TypeError:无法读取未定义的属性(读取存在)

expo 日历应用因权限问题而崩溃

React Native 应用程序没有在之前的工作代码中执行任何操作就无法运行

React 从 babel 6 到 babel 7 的原生升级

react-native StyleSheet 属性和选项列表

你如何在生产模式下运行 react-native 应用程序?

如何为 Picker 提供默认的Please select...选项?

这个 refs 在方法中变得未定义

如何解决此错误您可能需要适当的加载程序来处理此文件类型

如何在 React Native 中按下按钮时更改文本值?

区别需要MainQueueSetup 和dispatch_get_main_queue?

DeviceInfo 原生模块未正确安装

由于对 sourcetree 的 husky 预推送,Git 推送失败

将 setState 与 promise 一起使用后出现错误

开始滚动时使 TouchableOpacity 不突出显示元素

react-native:0.41 app.json

如何在react-native中将文本放置在图像上?

React Native 项目,有时使用 expo start 获得连接 ECONNREFUSED 127.0.0.1:19001

在 React Native 中,两个等宽的按钮水平填充屏幕

如何定义react-native应用程序的入口点