React Native TextInput Multiline不会被键盘推向



我的文本输入具有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"上的行为属性设置为"填充"。现在对我来说是完美的。让我知道这是否有帮助!:)

相关内容

  • 没有找到相关文章

最新更新