gpt4 book ai didi

react-native - 无法弄清楚如何正确使用 KeyboardAvoidingView

转载 作者:行者123 更新时间:2023-12-04 12:42:36 26 4
gpt4 key购买 nike

我正在使用 react native 开发一个应用程序,我们有我们的设计师制作的屏幕布局。但我无法正确实现预期的行为。基本上它是一个带有一些文本输入和一个按钮的屏幕,当键盘出现时我需要一些东西来正确调整。以下是预期的屏幕:
Without keyboard
With keyboard
所以当键盘出现时,按钮必须上升很多,两个文本输入都会上升一点,并且顶部的文本保持不变。没有键盘的屏幕看起来很完美,但现在当键盘出现时它什么也不做。我尝试了很多东西,没有一个真正奏效。这是现在的渲染方法:

render() {
const textInputBorderColor = this.state.hasError ? Colors.error : Colors.background;
const textInputCpfMarginTop = this.state.hasError ? 24 : 48;

return (
<View style = {styles.container}>
<KeyboardAvoidingView behavior='padding'>
<Text style = {styles.headerText}>Vamos começar!</Text>

<TextInput
value = {this.props.user.name}
onChangeText = {text => this.props.user.name = text}
placeholder = 'Insira aqui seu nome completo'
style = {[styles.textInputName, {borderColor: textInputBorderColor}]}
/>

<ErrorText show = {this.state.hasError} value = {this.state.errorMsg}/>

<TextInputMask
value = {this.props.user.cpf}
onChangeText = {text => this.props.user.cpf = text}
placeholder = 'e aqui seu CPF'
keyboardType = 'numeric'
type = 'cpf'
style = {[styles.textInputCpf, {borderColor: Colors.background, marginTop: textInputCpfMarginTop}]}
/>

<View style = {{marginTop: 202}}>
<DefaultButton
onPress = {this.onButtonPress}
btnLabel = 'Continuar'
disabled = {(this.props.user.name == '' || this.props.user.cpf.length != 14)}
/>
</View>
</KeyboardAvoidingView>
</View>
);
}
款式:
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#FFFFFF',
alignItems: 'center',
},

textInputName: {
textAlign: 'center',
fontFamily: 'Roboto-Light',
fontSize: 16,
paddingBottom: ScreenDimensions.width * 0.01,
borderBottomWidth: 1,
marginTop: 96,
width: 321
},

textInputCpf: {
textAlign: 'center',
fontFamily: 'Roboto-Light',
fontSize: 16,
paddingBottom: ScreenDimensions.width * 0.01,
borderBottomWidth: 1,
width: 321
},

headerText: {
marginTop: 66,
textAlign: 'center',
fontFamily: 'Roboto-Light',
fontSize: 20,
color: '#000'
}
})
此组件 (keyboardAvoidingView) 上的文档毫无值(value)...
非常感谢您的帮助!

最佳答案

忘记发布对我们有用的东西。经过一些测试,我们能够找到一个可行的解决方案。我们将文本输入括在 ScrollView 中所以在使用小屏幕设备时它工作正常,并且只用 KeyboardAvoidingView 包围按钮.两者都被外部 View 包围.

下面是一个例子:

<View style = {{flex: 1, alignItems: 'center', justifyContent: 'flex-end'}}>
<ScrollView
contentContainerStyle={{ flexGrow: 1, justifyContent: 'center' }}
style={{ alignSelf: 'stretch' }}
>
# Your Text Inputs
</ScrollView>

<KeyboardAvoidingView
behavior='padding'
keyboardVerticalOffset={Platform.OS == 'ios' ? Header.HEIGHT + getStatusBarHeight() : Header.HEIGHT + 32}
style={{ flex: 1, justifyContent: 'flex-end', alignSelf: 'stretch', marginBottom: 16 }}
>
# Yout Button
</KeyboardAvoidingView>
</View>

边注:在 ScrollViews 中使用文本输入和按钮时要小心(我的解决方案不是这种情况),因为有一个小问题,你不能在键盘打开的情况下点击按钮。

关于react-native - 无法弄清楚如何正确使用 KeyboardAvoidingView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56550981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com