React Native 在 Apple 中显示文本两次,在 Android 中显示一次

Posted

技术标签:

【中文标题】React Native 在 Apple 中显示文本两次,在 Android 中显示一次【英文标题】:React Native showing text twice in Apple, Once in Android 【发布时间】:2019-07-26 14:30:22 【问题描述】:

我有一个反应原生代码,使用 expo,带有一个带有文本的图表。在 Apple 中,此应用程序显示了两次。在 android 中,一次。

代码如下:

import  ScrollView, StyleSheet, Text, View, Alert, Dimensions  from 'react-native';

...

// Charts
import * as scale from 'd3-scale'
import  ProgressCircle, LineChart, XAxis, Grid  from 'react-native-svg-charts';


.... <Other Code> ... 

        <View style= flexDirection: 'row', justifyContent: 'space-between' >
            <View style= padding: 10 >
<ProgressCircle
    style= height: 150, width: 150 
    startAngle=-Math.PI * 0.5
    endAngle=Math.PI * 0.5
    progress=this.state.perFirstTier
    progressColor=constants.BGC_GREEN
    strokeWidth=10>
    * THIS IS WHAT IS DOUBLED*
    <Text key ='percentage' style=
        position: "absolute",
        marginLeft: 65, marginTop: 50
    >(this.state.perFirstTier * 100).toFixed(0)%</Text>

</ProgressCircle>
<View style= marginTop: -40, flex: 1, justifyContent: 'center', alignItems: 'center' >
    <Text style=styles.description>i18n.t('activityDashboard.firstGoalDesc')</Text>
    /* Show colored badge if 100%*/
    this.state.perSecondTier == 1
        ? <Image style=styles.medalImage source=require('../../utils/images/silver_medal.png')></Image>
        : <Image style=styles.medalImage source=require('../../utils/images/grey_medal.png')></Image>
    
</View>

        </View>

这是苹果与安卓的图片对比:

为什么会发生这种情况,我怎样才能让它只显示一次?

【问题讨论】:

【参考方案1】:

因为 ProgressCircle 组件中已经声明了进度,并且在其中渲染了进度。只需从 ProgressCircle 中删除 Text 组件。我猜它在 Android 上已经隐藏了溢出,所以它没有显示在那里。

【讨论】:

我最终将它从圆圈内移除,并放在下方。我用 -100 marginTop 偏移文本,直到它位于圆圈的顶部。【参考方案2】:

如果一切都失败了,请尝试为 ios 平台添加渲染条件。

<ProgressCircle
  style= height: 150, width: 150 
  startAngle=-Math.PI * 0.5
  endAngle=Math.PI * 0.5
  progress=this.state.perFirstTier
  progressColor=constants.BGC_GREEN
  strokeWidth=10
>
  /* THIS IS WHAT IS DOUBLED */
  Platform.OS === 'ios' 
    ? <View />
    : (
        <View>
          <Text
            key ='percentage'
            style=
              position: "absolute",
              marginLeft: 65,
              marginTop: 50
            
          >
            (this.state.perFirstTier * 100).toFixed(0)%
          </Text>
        </View>
    )
  
</ProgressCircle>

【讨论】:

【参考方案3】:

我在 iOS14 上尝试将 YAxis 呈现为 时遇到了类似的问题。我使用 是因为很难使用 YAxis 将标签放在图表栏的顶部。

我的规格:


    "expo": "~39.0.2",
    "react-native-svg-charts": "^5.4.0",
    "react-native-svg": "12.1.0"

代码:

const Values = ( x, y, data ) => 
return (
    data.map((value, index) => 
        return (
            <Text
                key=index
                style=
                    color: '#6e6969',
                    fontSize: 10,
                    position: 'absolute',
                    left: x(index) + 1,
                    top: y(value) - 15
                
            >
                value
            </Text>
        )
    )
)

<BarChart
    style=styles.chart
    data=data.plot
    spacing=0.2
    svg= fill: 'rgba(134, 65, 244, 0.8)' 
    contentInset= top: 20, bottom: 20, left: 0, right: 0 
>
    <Values />
</BarChart>

<XAxis
    style= marginHorizontal: -10 
    data=data.plot
    formatLabel=(value, index) => data.labels[index]
    contentInset= left: 30, right: 30 
    svg= fontSize: 10, fill: colors.medium 
/>

结果

我需要做的是将 包装到 中,问题就解决了:

更改代码:

const Values = ( x, y, data ) => 
return (
    data.map((value, index) => 
        return (
            <View key=index>
                <Text
                    style=
                        color: '#6e6969',
                        fontSize: 10,
                        position: 'absolute',
                        left: x(index) + 1,
                        top: y(value) - 15
                    
                >
                value
            </Text>
        </View>
        )
    )
)

结果

不过,这两个代码在 Android 上都运行良好。

【讨论】:

以上是关于React Native 在 Apple 中显示文本两次,在 Android 中显示一次的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-native 中更改应用程序的显示名称

将 Google 支付按钮和 Apple 支付按钮集成到 react-native 应用程序中

React Native 开发中 Apple Health Kit 的虚假步骤数据

React Native mapview:标记未在IOS上显示

使用 React Native 的 Apple Pay

Cocoapods 在设置 react-native 开发时无法下载依赖项(APPLE M1)