为啥视图和文本输入之间存在差距?

Posted

技术标签:

【中文标题】为啥视图和文本输入之间存在差距?【英文标题】:why is there a gap between view and text input?为什么视图和文本输入之间存在差距? 【发布时间】:2021-11-26 11:24:06 【问题描述】:

我的包装视图和文本输入之间出现了一些差距,我检查了填充和边距,但没有任何效果:

      <View style=styles.wrapper>
        <View style= width: '100%',height:'10%', backgroundColor: 'yellow' ></View>

        <TextInput style=styles.edit_input
          numberOfLines=15
          multiline=true
        />
      </View>

造型:

  wrapper: 
        width: '90%',
        marginTop: '10%',
        backgroundColor: 'gray',
        borderTopWidth: 1,
    ,
    edit_input:  
        backgroundColor:'white',
        color: 'black', 
        borderWidth: 1, 
        textAlignVertical: 'top',
        width: '90%',
        alignSelf: 'center',
    ,

但是当您将 height:'10%' 替换为 height:50 时,这种情况就会消失

知道是什么原因造成的吗?或者如何使用相对单位解决这个问题?

【问题讨论】:

高度不受影响 @Ifaruki 是什么意思? 【参考方案1】:

我不建议使用您的方法,因为它在不同设备上的行为往往不同。例如,您的方法在网络上看起来与您期望的一样,但在移动设备上显示出差距。

改为使用 flexbox 方法。问题是你真正想要在这里实现什么。您没有在包装器或 Textinput 上设置高度。黄色条的高度是 10% 到底是多少呢?这有点模棱两可,容易出现意想不到的设计问题。如果您希望黄色框占 TextInput 的 10%,您可以使用 flex 框执行类似的操作。

export default function App() 
  return (
      <View style=styles.wrapper>
        <View style= width: '100%', flex:1, backgroundColor: 'yellow' ></View>

        <TextInput style=styles.edit_input
          numberOfLines=15
          multiline=true
        />
      </View>
  );


const styles = StyleSheet.create(
  wrapper: 
        width: '90%',
        marginTop: '10%',
        backgroundColor: 'gray',
        borderTopWidth: 1,
        flex: 1
    ,
    edit_input:  
        backgroundColor:'white',
        color: 'black', 
        borderWidth: 1, 
        textAlignVertical: 'top',
        width: '90%',
        alignSelf: 'center',
        flex: 9
    ,
);

请注意,这种方法将填满所有可用空间,而您的则没有。但是你唯一具有高度的元素是带有 numberOfLines 的 TextInput,它的大小取决于用户的字体缩放等。所以你不应该依赖它。

【讨论】:

以上是关于为啥视图和文本输入之间存在差距?的主要内容,如果未能解决你的问题,请参考以下文章

为啥列表视图不显示用户输入的文本

为啥输入不改变颜色?

在表格视图单元格之间移动的文本

Edittext下划线与输入布局中的提示之间的差距

dea投入角度和产出角度效率差距

故事板减少视图之间的差距