【问题标题】:React Native - Style is not consistent across multiple devicesReact Native - 样式在多个设备上不一致
【发布时间】:2021-01-25 03:31:34
【问题描述】:

我学习了 react native 并开始开发一个基本的支付应用程序。我正在使用 flex 在屏幕内排列元素。 Flex 布局在所有设备上都是一致的,但如果我将样式应用于 Flux 内的某些组件,则在不同设备之间是不一致的。

例如,我在 flex 内部的视图中添加了一个下拉组件(到期月份),并将顶部边距添加为 25 px。如果我在 Iphone 8 plus 中打开该应用程序,它会按预期显示,但如果我在 Iphone 8 中打开它,它会触摸它上面的组件(即使我尝试将单位更改为百分比而不是像素,但仍然是相同的行为)。我不确定为什么样式在多个设备上都没有响应,有人可以指导我如何使样式响应。

请看下面的截图和代码 sn-p 。谢谢!!!

iPhone 8 Plus

iPhone 8

元素的代码片段

    <View
  style={{
    flex: 0.1,
    flexDirection: "row",
  }}
>
  <RNPickerSelect
    items={CardExpiryMonth.getMonth()}
    style={{
      ...pickerSelectStyles1,

      placeholder: { color: "grey", fontSize: 15, fontFamily: myFont },
      iconContainer: {
        top: 35,
      },
    }}
    placeholder={{
      label: "Exp Month",
      color: "green",
    }}
    placeholderTextColor="red"
    useNativeAndroidPickerStyle={false}
    textInputProps={{ underlineColor: "yellow" }}
    Icon={() => {
      return <Ionicons name="md-arrow-down" size={24} color="gray" />;
    }}
  />
</View>
const pickerSelectStyles1 = StyleSheet.create({
inputIOS: {
fontSize: 16,
height: 50,
paddingVertical: 12,
paddingHorizontal: 10,
borderWidth: 1,
borderColor: "gray",
borderRadius: 4,
color: "black",
paddingRight: 30, // to ensure the text is never behind the icon
width: 130,
top: 25,
left: 8 }

【问题讨论】:

  • 我认为这是因为 flex:.1。这意味着如果区域的高度为 100px,它将为元素分配 10px。同样适用于不同的 iPhone 尺寸
  • 嗨 SaachiTech,感谢您的 cmets,即使 flex 是问题,如何解决?这就是网上所有教程都提到应用 flex 的方式。您能否提出一些解决方案以使样式响应所有设备。
  • 父容器长什么样?你能在stackblitzcondesandbox 上提供最小的可重复性吗?
  • @onkarruikar 这是我的代码:pastebin.com/EV5crvBQ,它在像素 5 上完美运行,但在其他设备上我得到不同的 css,我的宽度屏幕之外的一些组件等等
  • 为什么在问题中你说 marginTop 但在代码中它只是说 top? Top 不会做太多,因为你没有绝对位置。将其更改为 marginTop ,它可能会工作......

标签: html css reactjs react-native flexbox


【解决方案1】:

我认为最简单的方法是为您的父视图留出余量。所以代码是。

<View
  style={{
    marginTop: 25, // For only iOS (Platform.OS === 'ios') ? 25 : 0,
    flex: 0.1,
    flexDirection: "row",
  }}
>
  <RNPickerSelect
    // your code
  />
</View>

如果您想更改RNPickerSelect 的样式,那么您可以检查给定的示例here,您使用它是错误的,您将 inputIOS 放入类似于下面代码的样式中。

  <RNPickerSelect
    style={{ inputIOS: {...your style} }} // this is wrong
  />  

inputIOS 属性应该是 style 的直接属性。

还找到您使用top: 25, 为绝对位置提供margin top top 属性使用的另一件事。所以,请确认 RNPickerSelect 使用绝对位置,否则请使用marginTop: 25,

如果您还有任何疑问,请告诉我。

【讨论】:

  • 感谢您的回答。
  • 我很高兴@chikabala 请接受答案,以便其他人可以信任。
  • 我愿意接受,但这不是我的问题:(
  • 感谢您的回复。
猜你喜欢
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多