React native IOS InputAccessoryView 在关闭模式后从屏幕上消失
React native IOS InputAccessoryView disappear from the screen after close modal
当我的屏幕上有 InputAccessoryView,它有没有 nativeID 的组件(所以即使没有显示键盘,它也会不断显示)并且我打开和关闭 Modal(react-native modal)然后 InputAccessoryView 从屏幕上消失组件。我不知道为什么会这样,也不知道如何在屏幕上保留此 InputAccessoryView。
这是重现它的代码:
import * as React from 'react';
import { View, ScrollView, AppRegistry, TextInput, InputAccessoryView, Button } from 'react-native';
import {Modal, Text, TouchableHighlight, Alert} from 'react-native';
import Constants from 'expo-constants';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {text: 'Placeholder Text', modalVisible: false,};
}
setModalVisible(visible) {
this.setState({modalVisible: visible});
}
render() {
return (
<View style={{flex:1}}>
<Modal
animationType="slide"
transparent={false}
visible={this.state.modalVisible}
onRequestClose={() => {
Alert.alert('Modal has been closed.');
}}>
<View style={{marginTop: 22, padding: 50, backgroundColor: '#0066ff'}}>
<View>
<TouchableHighlight
onPress={() => {
this.setModalVisible(!this.state.modalVisible);
}}>
<Text style={{color:"#ffffff"}}>Hide Modal</Text>
</TouchableHighlight>
</View>
</View>
</Modal>
<ScrollView style={{ backgroundColor: '#6ED4C8'}}>
<Text></Text>
<TouchableHighlight
onPress={() => {
this.setModalVisible(true);
}}>
<Text style={{padding: 40, backgroundColor: "#ff3300"}}>Show Modal</Text>
</TouchableHighlight>
</ScrollView>
<InputAccessoryView backgroundColor="#ff9900" >
<TextInput
style={{
padding: 20,
paddingTop: 50,
}}
onChangeText={text => this.setState({text})}
value={this.state.text}
/>
</InputAccessoryView>
</View>
);
}
}
在这里您可以找到在线版本(请记住,该问题仅与 IOS 相关):
https://snack.expo.io/SJB7ipm6B
部分图片:
感谢您的宝贵时间和帮助!
试试这个。一旦模式关闭,我将重新渲染 InputAccessoryView
{(!this.state.modalVisible) && <InputAccessoryView backgroundColor="#ff9900">
<TextInput
style={{
padding: 20,
paddingTop: 50,
}}
onChangeText={text => this.setState({text})}
value={this.state.text}
/>
</InputAccessoryView>}
我刚遇到同样的问题。在深入研究了一段时间后,我发现在没有 re-rendering InputAccessoryView 的情况下,将模态上的 presentationStyle 道具设置为 overFullScreen
可以解决这个问题。
当我的屏幕上有 InputAccessoryView,它有没有 nativeID 的组件(所以即使没有显示键盘,它也会不断显示)并且我打开和关闭 Modal(react-native modal)然后 InputAccessoryView 从屏幕上消失组件。我不知道为什么会这样,也不知道如何在屏幕上保留此 InputAccessoryView。
这是重现它的代码:
import * as React from 'react';
import { View, ScrollView, AppRegistry, TextInput, InputAccessoryView, Button } from 'react-native';
import {Modal, Text, TouchableHighlight, Alert} from 'react-native';
import Constants from 'expo-constants';
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {text: 'Placeholder Text', modalVisible: false,};
}
setModalVisible(visible) {
this.setState({modalVisible: visible});
}
render() {
return (
<View style={{flex:1}}>
<Modal
animationType="slide"
transparent={false}
visible={this.state.modalVisible}
onRequestClose={() => {
Alert.alert('Modal has been closed.');
}}>
<View style={{marginTop: 22, padding: 50, backgroundColor: '#0066ff'}}>
<View>
<TouchableHighlight
onPress={() => {
this.setModalVisible(!this.state.modalVisible);
}}>
<Text style={{color:"#ffffff"}}>Hide Modal</Text>
</TouchableHighlight>
</View>
</View>
</Modal>
<ScrollView style={{ backgroundColor: '#6ED4C8'}}>
<Text></Text>
<TouchableHighlight
onPress={() => {
this.setModalVisible(true);
}}>
<Text style={{padding: 40, backgroundColor: "#ff3300"}}>Show Modal</Text>
</TouchableHighlight>
</ScrollView>
<InputAccessoryView backgroundColor="#ff9900" >
<TextInput
style={{
padding: 20,
paddingTop: 50,
}}
onChangeText={text => this.setState({text})}
value={this.state.text}
/>
</InputAccessoryView>
</View>
);
}
}
在这里您可以找到在线版本(请记住,该问题仅与 IOS 相关): https://snack.expo.io/SJB7ipm6B
部分图片:
感谢您的宝贵时间和帮助!
试试这个。一旦模式关闭,我将重新渲染 InputAccessoryView
{(!this.state.modalVisible) && <InputAccessoryView backgroundColor="#ff9900">
<TextInput
style={{
padding: 20,
paddingTop: 50,
}}
onChangeText={text => this.setState({text})}
value={this.state.text}
/>
</InputAccessoryView>}
我刚遇到同样的问题。在深入研究了一段时间后,我发现在没有 re-rendering InputAccessoryView 的情况下,将模态上的 presentationStyle 道具设置为 overFullScreen
可以解决这个问题。