我们有一个由Reaction Native编写的Web应用程序.当我在Windows和Mac上运行该应用程序时,列表中列的对齐方式会发生变化,如照片所示.我有很多其他的 list ,但我没有在其中任何一个中经历过这个问题.然而,我在Windows上开发了之前的列表,而我在Mac上开发了这个特定的列表.

alignment on windows alignment on windows

alignment on mac alignment on mac

平面列表:

<FlatList
                  data={pageList}
                  keyExtractor={(item, index) => 'ti_' + index}
                  renderItem={({item}) => <CompilerListItem data={item} isSelected={selectItems.includes(item.branchName)} _onSelectChanges={onSelectChanges} />}
                />

编译器列表项:

<View style={styles.container}>
      <DataTable.Cell
        style={styles.checkBox}
        onPress={() => {
          setIsSelected(!isSelected)
        }}>
        <Checkbox status={isSelected ? 'checked' : 'unchecked'} />
      </DataTable.Cell>
      <FlatList //
        data={props.data.vwCompilerList}
        style={styles.arrayItem}
        keyExtractor={(item, index) => index.toString()}
        renderItem={({item}) => <CompilerListItemIssue data={item} />}
      />
</View>

编译器ListItemIssue:

<>
      <DataTable.Cell key={props.data.issueId} onPress={() => handleItemPress(props.data.issueId, false)} onLongPress={() => handleItemPress(props.data.issueId, true)}>
        <View style={styles.cellContainer}>
          <IssueCode style={[styles.issueCellItem, styles.issueCode]} issueCode={props.data.issueCode} priority={undefined} fontSize={17} />
          <View style={[styles.issueCellItem, styles.f2]}>
            <TableTitle numberOfLines={1}>{props.data.issueSummary}</TableTitle>
          </View>
          <View style={[styles.issueCellItem, styles.imageArea]}>
            <ProfileAvatarItem size={36} uri={props.data._assigneeUserImage} />
          </View>
          <View style={[styles.issueCellItem, styles.statusResult]}>
            <Table2ndText>{props.data.issueStatusStr}</Table2ndText>
          </View>
          <View style={[styles.issueCellItem, styles.testBoxesField]}>
            <View style={styles.testedApproveBox}>
              <Table2ndText style={{color: theme.colors.background}}>{props.data.testOnay ?? '?'}</Table2ndText>
            </View>

            <View style={styles.testedRejectedBox}>
              <Table2ndText style={{color: theme.colors.background}}>{props.data.testRed ?? '?'}</Table2ndText>
            </View>
          </View>
        </View>
      </DataTable.Cell>
      <Snackbar duration={3000} visible={snackVisible} onDismiss={() => setSnackVisible(false)} style={styles.snackbar}>
        {snackText}
      </Snackbar>
    </>

编译器ListItemIssue样式:

issueCode: {
      minWidth: 110,
    },
    f2: {
      flex: 2,
    },
    cellContainer: {
      flex: 1,
      flexDirection: 'row',
      alignItems: 'center',
      paddingVertical: 5,
    },
    issueCellItem: {
      marginEnd: 10,
    },
    statusResult: {
      minWidth: 200,
    },
    checkBox: {
      justifyContent: 'center',
      maxWidth: 40,
      marginEnd: 10,
    },
    testBoxesField: {
      flexDirection: 'row',
      minWidth: 75,
    },
    testedApproveBox: {
      backgroundColor: theme.colors.valid,
      borderRadius: 5,
      height: 25,
      width: 25,
      alignItems: 'center',
      justifyContent: 'center',
      marginHorizontal: 3,
    },
    testedRejectedBox: {
      backgroundColor: theme.colors.error,
      borderRadius: 5,
      height: 25,
      width: 25,
      alignItems: 'center',
      justifyContent: 'center',
      marginHorizontal: 3,
    },
    imageArea: {
      flexDirection: 'row',
      alignItems: 'center',
      justifyContent: 'center',
      minWidth: 60,
      marginHorizontal: 10,
    },
    snackbar: {
      backgroundColor: theme.colors.error,
      alignSelf: 'center',
    },

推荐答案

我重构了CompilerListItemIssue,同时保护了cell上的onPress功能, TouchableOpacity from 'react-native' 所以请把它加到文件的最上面

100

    <>
      <TouchableOpacity style={styles.cellContainer} key={props.data.issueId} onPress={() => handleItemPress(props.data.issueId, false)} onLongPress={() => handleItemPress(props.data.issueId, true)}>
        <IssueCode style={[styles.issueCellItem, styles.issueCode]} issueCode={props.data.issueCode} priority={undefined} fontSize={17} />
        <View style={[styles.issueCellItem, styles.f2]}>
          <TableTitle numberOfLines={1}>{props.data.issueSummary}</TableTitle>
        </View>
        <View style={[styles.issueCellItem, styles.imageArea]}>
          <ProfileAvatarItem size={36} uri={props.data._assigneeUserImage} />
        </View>
        <View style={[styles.issueCellItem, styles.statusResult]}>
          <Table2ndText>{props.data.issueStatusStr}</Table2ndText>
        </View>
        <View style={[styles.issueCellItem, styles.testBoxesField]}>
          <View style={styles.testedApproveBox}>
            <Table2ndText style={{color: theme.colors.background}}>{props.data.testOnay ?? '?'}</Table2ndText>
          </View>

          <View style={styles.testedRejectedBox}>
            <Table2ndText style={{color: theme.colors.background}}>{props.data.testRed ?? '?'}</Table2ndText>
          </View>
        </View>
      </TouchableOpacity>

      <Snackbar duration={3000} visible={snackVisible} onDismiss={() => setSnackVisible(false)} style={styles.snackbar}>
        {snackText}
      </Snackbar>
    </>

Typescript相关问答推荐

相同端点具有不同响应时的RTKQuery类型定义

如何正确修复TypScript 4.7到4.8升级中的TS 2345编译错误

即使子网是公共的,AWS CDK EventBridge ECS任务也无法分配公共IP地址

APP_INITIALIZER—TypeError:appInits不是函数

TypeScript将键传递给新对象错误

防止获取发出不需要的请求

使用React处理Websocket数据

为什么typescript要把这个空合并转换成三元?

类型脚本`Return;`vs`Return unfined;`

类型脚本基于数组作为泛型参数展开类型

如何将泛型对象作为返回类型添加到类型脚本中

在实现自定义主题后,Angular 不会更新视图

如何在处理数组时缩小几个派生类实例之间的类型范围?

获取一个TypeScrip对象,并将每个属性转换为独立对象的联合

迭代通过具有泛型值的映射类型记录

17个Angular 的延迟观察.如何在模板中转义@符号?

TS2739将接口类型变量赋值给具体变量

推断集合访问器类型

带动态键的 TS 功能

是否可以使用元组中对象的键来映射类型