gpt4 book ai didi

javascript - React native flexbox - 如何做百分比 ||列 ||响应 ||网格等

转载 作者:可可西里 更新时间:2023-11-01 02:15:18 26 4
gpt4 key购买 nike

在过去几周在 iOS 上使用 React Native 之后,我似乎发现了 Flex 样式的一些缺点……尤其是在“响应式”行为方面。

例如,假设您要创建一个包含卡片的 View (这些卡片的元数据来自 API)。您希望卡片占 View 宽度的 50% 减去边距和填充,并在每 2 个之后换行。

enter image description here

我对此 View 的当前实现将返回的数组拆分为包含 2 个元素的行。列表容器有 flex: 1, flexDirection: 'column,行有 flex: 1 然后每张卡片都有 flex: 1。最终结果是每行有 2 列,平均占据 View 宽度的一半。

似乎没有简单的方法可以在 React Native 样式中执行此操作,无需使用 javascript 对数据进行某种预处理以使其具有正确的样式。有没有人有什么建议?

最佳答案

使用 flexbox 可能有更好的方法来实现这一点,但我通常为视口(viewport)宽度和视口(viewport)高度定义“百分比”助手 vwvh,以CSS 视口(viewport)尺寸测量单位:

import {Dimensions} from 'react-native';

function vw(percentageWidth) {
return Dimensions.get('window').width * (percentageWidth / 100);
}

function vh(percentageHeight) {
return Dimensions.get('window').height * (percentageHeight / 100);
}

要在网格中流动元素,您可以计算元素的适当大小,考虑边距和视口(viewport)大小:

const COLUMNS = 3;
const MARGIN = vw(1);
const SPACING = (COLUMNS + 1) / COLUMNS * MARGIN;

const grid = {
flex: 1,
flexWrap: 'wrap',
flexDirection: 'row',
justifyContent: 'flex-start'
};

const cell = {
marginLeft: MARGIN,
marginTop: MARGIN,
width: vw(100) / COLUMNS - SPACING
}

return (
<View style={grid}>
{this.props.things.map(thing => <View style={cell} />)}
</View>
)

只有当您的元素数量已知且数量有限时,才应使用此技术 - 对于任意数量的卡片,出于性能原因,您应该使用 ListView,并手动将数据集拆分为行。

关于javascript - React native flexbox - 如何做百分比 ||列 ||响应 ||网格等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com