處理react native TextInput鍵盤遮擋問題

最近在項目中,使用TextInput組件的時候,發(fā)現(xiàn)鍵盤彈出的時候,遮蓋了表單。
在ReactNative中是否有處理方法呢?
答案是肯定的,我們使用ScrollVIew的scrollTo方法,我們也主要是講這種方法。

具體方案如下:
組件render方法中使用ScrollView,并且設置scrollview的keyboardShouldPersistTaps={true}
keyboardShouldPersistTaps bool 默認值為false。
當此屬性為false的時候,在軟鍵盤激活之后,點擊焦點文本輸入框以外的地方,鍵盤就會隱藏。如果為true,滾動視圖不會響應點擊操作,并且鍵盤不會自動消失。
在scrollview中用一個view作為Container包裹所有剩余的子視圖,比如Text,TouchableHighlight之類的;并且用onStartShouldSetResponderCapture截取該view的事件,用以解決當點擊頁面上的按鈕時,第一次點擊只會收起鍵盤,第二次點擊才會響應按鈕方法的bug。然后在TextInput的onFocus方法中滾動scrollview,在onEndEditing中恢復scrollview的滾動。

具體的代碼如下:
在render方法里定義一個ScrollView,在ScrollView中有一個子View。

     <ScrollView ref='scroll' keyboardShouldPersistTaps={true} >  
       <View onStartShouldSetResponderCapture={(e) => {  
    let target = e.nativeEvent.target;  
    if (target !== ReactNative.findNodeHandle(this.refs.hour) ) {  
        this.refs.hour.blur();  
    }  
       }}>  
       </View>  
     </ScrollView>  

View里的TextInput的代碼如下:

    <TextInput  
      style={styles.ksValueView}  
      maxLength={2}  
      placeholder="0"  
      placeholderTextColor="#b2b2b2"  
      multiline={false}  
      onChangeText={this.changeHour.bind(this)}  
      keyboardType="numeric"  
      ref = 'hour'  
      onFocus={this.scrollViewTo.bind(this)}  
      onEndEditing={()=>{this.refs.scroll.scrollTo({y:0,x:0,animated:true})}}  
      />  

onFocus方法中滾動scrollview,在onEndEditing中恢復scrollview的滾動。
滾動函數(shù)如下:

    scrollViewTo(e){  
    let target = e.nativeEvent.target;  
    let scrollLength = 0;//初始值  
    if (target=== ReactNative.findNodeHandle(this.refs.hour)) {  
      scrollLength = 216;  
    }  
    this.refs.scroll.scrollTo({y:scrollLength,x:0});  

需要注意的點:
1、滾動的高度需要根據(jù)你的使用場景確認
2、最好由Native給RN動態(tài)的計算出虛擬鍵盤的高度

好了,用上述方案,基本可以解決虛擬鍵盤覆蓋表單的問題。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容