我的文本输入具有Multiline True。但是,在两行之后,文本消失在键盘后面。我尝试在keyboardAvoidingView中包装文本输入,但它不起作用。
当我解开文本输入时,键盘确实会推开文本输入,然后单击底线。知道我如何如何使TextInput的最后一行留在键盘顶部?
代码:
<View style={styles.descriptionFlexStyle}>
<Text
style={[
styles.headerTextStyle,
{ marginTop: Window.height * 0.04 }
]}> Please fill in a reason </Text>
<ScrollView>
<TextInput
style={styles.reasonTextInput}
placeholder="Reason"
value={reasonText}
multiline={true}
onChangeText={input =>
this.setState({
reasonText: input
})
}
underlineColorAndroid="transparent"
ref="reasonTextInput"
/>
</ScrollView>
</View>
您好,亲爱的,您必须使用React-native中的KeyboardAvoidingView
组件,并在下面使用一个行为:
<KeyboardAvoidingView behavior={'postion' || 'height' || 'padding'}>
<View style={styles.descriptionFlexStyle}>
<Text
style={[
styles.headerTextStyle,
{ marginTop: Window.height * 0.04 }
]}> Please fill in a reason </Text>
<ScrollView>
<TextInput
style={styles.reasonTextInput}
placeholder="Reason"
value={reasonText}
multiline={true}
onChangeText={input =>
this.setState({
reasonText: input
})
}
underlineColorAndroid="transparent"
ref="reasonTextInput"
/>
</ScrollView>
</View>
</KeyboardAvoidingView>
这个答案可能为时已晚。但是,我在不使用KeyboardAvoidingView
组件的情况下找到了解决方法。ScrollView
可以用来将多行TextInput
滚动到顶部,以具有"键盘避免"效果。在使用scrollTo()
方法将TextInput
直接滚动到屏幕顶部之前,我将使用REF measure()
方法获取TextInput
的顶部Y值,从而有效地避免使用键盘。
import React, { useRef } from "react";
import { ScrollView, TextInput, View } from "react-native";
export default function Test() {
const scrollViewRef = useRef(null);
const viewRef = useRef(null);
const handleFocus = () => {
viewRef.current.measure((x, y) => {
scrollViewRef.current.scrollTo({ x: 0, y });
});
};
return (
<ScrollView ref={scrollViewRef}>
{/* View to fill up space */}
<View
style={{
width: "80%",
height: 600,
}}
/>
<View ref={viewRef}>
<TextInput
onFocus={handleFocus}
multiline={true}
style={{
width: "80%",
height: 100,
backgroundColor: "whitesmoke",
alignSelf: "center",
}}
/>
{/* View to fill up space */}
<View
style={{
width: "80%",
height: 600,
}}
/>
</View>
</ScrollView>
);
}
好吧,我终于使用" keyboardAvoidingView"解决了它。我做了两件事。首先,我删除了文本输入上的高度,然后将" keyboardAvoidingView"上的行为属性设置为"填充"。现在对我来说是完美的。让我知道这是否有帮助!:)