在iOS和Android中使用相同的代码对本机应用程序进行反应,但结果不同

时间:2019-08-26 11:55:38

标签: react-native react-native-android react-native-ios styling

我是React的新手,我正在Udemy学习有关React Native的课程。 我遇到了一个样式问题,该问题使用相同的代码和StyleSheet属性,即Text中的borderWith,在Android和iOS中看起来有所不同。

当我在Text组件中添加粗体“ borderWith”时,在iOS中,文本会自动从边框开始留一点边距,但Android会将边框与Text混合在一起。 我看到了一个使用平台模块或文件扩展名的解决方案,但我想知道是否可以避免这种情况,并且我的大部分代码都与这两种设备相似。

const BoxScreen = () => {
    return (
        <View style={styles.viewStyle}>
            <Text style={styles.textStyle}>Box screen</Text>
        </View>
    );
};

const styles = StyleSheet.create({
    viewStyle: {
        borderWidth: 3,
        borderColor: 'black',
    },
    textStyle: {
        borderWidth: 10,
        borderColor: 'red',
        // marginVertical: 20,
        marginHorizontal: 20,
    }
}); 

iOS中的结果

Result in iOS

Android中的结果

Result in Android

5 个答案:

答案 0 :(得分:1)

   Try this,

   issue regarding android then you can use Platform.OS ,

   more information to visit,

https://facebook.github.io/react-native/docs/platform-specific-code

   const BoxScreen = () => {
        return (
            <View style={styles.viewStyle}>
                <Text style={styles.textStyle}>Box screen</Text>
            </View>
        );
    };

    const styles = StyleSheet.create({
        viewStyle: {
            borderWidth: 3,
            borderColor: 'black',
        },
        textStyle: {
            borderWidth: 10,
            borderColor: 'red',
            // marginVertical: 20,
            marginHorizontal: Platform.OS === 'ios' ? 20 : 30,
            padding:Platform.OS === 'ios' ? 0 : 5

        }
    }); 

答案 1 :(得分:1)

有趣的是我之前从未注意到。
那是因为保证金!
ios 中,元素的总高度和宽度由边框,填充和元素内部高度的总和计算得出,因此,如果给它一个边距,它将推动边框和填充,就像边框在增长到<盒中的strong>外部。
Android 中,外部高度呈现为内部高度。就像边框在框内内部一样。
因此,要解决此问题,您应该在框中心对齐文本,以在两个平台上均达到预期效果:

class App extends Component {
  render () {
    return(
        <View style={styles.box}>
          <Text style={styles.title}> Box Screen</Text>
        </View>
    );
  }
}

const styles={
  title : {
    flex : 1,
    justifyContent : 'center',
    borderWidth : 10,
    borderColor : 'red',
    margin: 20,
    padding: 20,
  },
  box : {
    borderWidth : 3,
    borderColor : 'black',
  },
}

答案 2 :(得分:0)

希望这行得通!

const BoxScreen = () => {
    return (
        <View style={styles.viewStyle}>
            <View style={styles.textStyle}>
                <Text>Box screen</Text>
            </View>
        </View>
    );
};

const styles = StyleSheet.create({
    viewStyle: {
        borderWidth: 3,
        borderColor: 'black',
    },
    textStyle: {
        borderWidth: 10,
        borderColor: 'red',
        paddingHorizontal: 20,
    }
}); 

建议使用自适应样式,请在此处检查: Link

答案 3 :(得分:0)

不要在文本元素上使用边距,而在视图元素上使用填充。

通常,您使用边距在兄弟姐妹之间进行间隔,使用填充对父母和孩子进行间隔。

答案 4 :(得分:0)

以文本样式尝试

    SELECT a.banchcode, 
       a.branchname, 
       b.regionname, 
       b.directoratename, 
       SUM(CASE
               WHEN a.caption IN('BUSINESS  LOAN', 'OVERDRAFTS', 'OVERDRAFTS', 'RETAIL PRODUCT LOAN', 
            'RETAIL PRODUCT LOAN', 'TERM LOANS', 'CBN/BOILOAN', 'LEASES', 'CREDIT CARD', 'LEASES', 'CREDIT CARD', 'CREDIT CARD - FCY',
            'ASSET ACQUISITION SCHEME', 'TERM LOANS - FCY', 'DEVICE LOAN SCHEME')
               THEN a.previousmonthaveragevolume
               ELSE 0
           END) June_Loan
FROM bs_report a
     LEFT JOIN mpr_team_structure b ON a.banchcode = b.branch_code
WHERE a.period = '7'
GROUP BY a.banchcode, 
         a.branchname, 
         b.regionname, 
         b.directoratename;