TextInput - Android与iOS中的不同高度

Posted

技术标签:

【中文标题】TextInput - Android与iOS中的不同高度【英文标题】:TextInput - different height in Android vs iOS 【发布时间】:2021-03-24 14:41:10 【问题描述】:

我对 React Native 很陌生,到目前为止,我的大部分测试都是在 ios 模拟器中进行的。现在我正在清理 android Emulator 中外观的小问题。我无法解决应用程序聊天部分中的一个特定问题。

我有一个 TextInput 组件包裹在一个 KeyboardAvoidingView 组件中,所以它总是浮动在键盘上方。 TextInput 应该增加到最多 5 行,类似于其他应用程序中的其他聊天。这一切在 iOS 模拟器中运行良好,但在 Android 模拟器中,TextInput 有一个初始高度或填充,我无法控制或操作。

这是我的代码 - 我已经“说明”了最相关的样式,所以你看看发生了什么。

<View style=mainStyles.background>
                <SafeAreaView style= flex: 1,   forceInset= top: 'never' >
                    <View style=flexDirection: 'column', flex: 1,>
                        <View style=height: 80>
                            <View style=mainStyles.safeHeader>
                                <TouchableOpacity activeOpacity=1.0 style= width: 36, height: 36, backgroundColor: '#fff', marginTop: 8, borderRadius: 18, justifyContent: 'center', alignItems: 'center', onPress=() => this.props.navigation.pop()>
                                    <Icon name='ios-arrow-back' size=26 color='#2D2C31'  />
                                </TouchableOpacity>

                                <Text style=mainStyles.screenTitle>this.state.title</Text>

                                <TouchableOpacity activeOpacity=1.0 style= width: 36, height: 36, backgroundColor: '#fff',  marginTop: 8, borderRadius: 18, justifyContent: 'center', alignItems: 'center', onPress=() => console.log("asd")>
                                    <Icon name='ios-more' size=26 color='#2D2C31'  />
                                </TouchableOpacity>
                            </View>
                        </View>
                        <View style=flexDirection: 'column', flex: 1, flexDirection: 'column'>
                            <FlatList inverted data=messages_data renderItem=this.renderItem keyExtractor=(item) => item.permalink onRefresh=() => this.onRefresh() refreshing=this.state.loading />
                        </View>
                    </View>

                    <KeyboardAvoidingView behavior=Platform.OS == "ios" ? "padding" : "height" style=width: '100%', backgroundColor: 'white' >
                        <TouchableWithoutFeedback onPress=Keyboard.dismiss>
                            <View style=width: '100%', backgroundColor: 'white', flexDirection: 'row', justifyContent: 'space-between', padding: 20>
                                <TextInput ref= (el) =>  this.new_message = el;  onChangeText=(new_message) => this.setState(new_message) value=this.state.new_message placeholder="Your message..." editable=true multiline=true numberOfLines=5 style=fontFamily: "Nunito_SemiBold", fontSize: 16, maxHeight: 120, paddingVertical: 0, flex: 1, justifyContent:"center", backgroundColor: 'white' />
                                <View style=width: 50, flexDirection: 'column', justifyContent: 'flex-end',>
                                    <TouchableOpacity onPress=() => this.createNewMessage() activeOpacity=1.0 style= width: 36, height: 36, backgroundColor: '#fff', marginRight: 20,  borderRadius: 18, justifyContent: 'center', alignItems: 'center', >
                                        <Icon name='md-send' size=26 color='#2D2C31'  />
                                    </TouchableOpacity>
                                </View>
                            </View>
                        </TouchableWithoutFeedback>
                    </KeyboardAvoidingView>
                </SafeAreaView>
                <SafeAreaView style= flex: 0, backgroundColor: 'white'  />
            </View>

这段代码给了我以下结果:

正如您在代码中看到的,我已经尝试按照this thread 中的建议将paddingVertical 强制为0

【问题讨论】:

【参考方案1】:

使垂直填充为零 (0) 并指定输入的高度。这将使两个平台上的文本输入一致。

【讨论】:

【参考方案2】:

试试behavior=Platform.OS == "ios" ? "padding" : "height"

据我所知,这种行为在 ios 和 android 上有所不同。 我的建议是为两个平台设置相同的行为。

我尝试了您的代码,但缺少样式和其他内容,我很难对其进行测试并获得您的确切输出。

还可以查看 React-Native InputAccessoryView

【讨论】:

以上是关于TextInput - Android与iOS中的不同高度的主要内容,如果未能解决你的问题,请参考以下文章

Android:包含 textInput 的 ScrollView 不滚动

反应本机iOS中的TextInput

TextInput键入的文本未出现在android上

在ios中设置TextInput占位符垂直居中 - React Native

react-native中ios的TextInput下划线颜色

React Native:TextInput toUpperCase 在 onChangeText 中的 Android 上不起作用