KeyboardAvoidingView在EXPO上有效,但在APK上无效?

时间:2018-08-31 09:44:53

标签: react-native react-native-android expo

我购买了这个主题,它在Expo上可以正常工作,但是一旦我构建了APK,键盘就会覆盖整个屏幕,并且无法按预期工作。

我正在使用expo进行测试,效果很好。

 return (
            <SafeAreaView style={styles.container}>
                <NavHeader title={thread.name} {...{navigation}} />
                <FlatList
                    inverted
                    data={messages}
                    keyExtractor={message => `${message.date}`}
                    renderItem={({ item }) => (
                        <Msg message={item} name={item.me ? name : thread.name} picture={thread.picture} />
                    )}
                />
                <KeyboardAvoidingView behavior={Platform.OS === "ios" ? "padding" : "height"} enabled>
                    <View style={styles.footer}>
                        <TextInput
                            style={styles.input}
                            placeholder="Write a message"
                            value={this.state.message}
                            onChangeText={message => this.setState({ message })}
                            autoFocus
                            blurOnSubmit={false}
                            returnKeyType="send"
                            onSubmitEditing={this.send}
                            underlineColorAndroid="transparent"
                        />
                        <TouchableOpacity primary transparent onPress={this.send}>
                            <Text style={styles.btnText}>Send</Text>
                        </TouchableOpacity>
                    </View>
                </KeyboardAvoidingView>
            </SafeAreaView>
        );

和样式

const styles = StyleSheet.create({
    container: {
        flex: 1
    },
    footer: {
        borderColor: Theme.palette.lightGray,
        borderTopWidth: 1,
        paddingLeft: Theme.spacing.small,
        paddingRight: Theme.spacing.small,
        flexDirection: "row",
        alignItems: "center"
    },
    input: {
        height: Theme.typography.regular.lineHeight + (Theme.spacing.base * 2),
        flex: 1
    },
    btnText: {
        color: Theme.palette.primary
    }
});

我尝试了以下插件

使用enableOnAndroid道具

https://github.com/APSL/react-native-keyboard-aware-scroll-view

没有成功。

我已经在这里发布了

https://github.com/APSL/react-native-keyboard-aware-scroll-view/issues/305

和此处:

https://github.com/expo/expo/issues/2172

2 个答案:

答案 0 :(得分:1)

不幸的是,这是一个已知问题

https://github.com/expo/expo/issues/2172

答案 1 :(得分:0)

根据屏幕布局的复杂程度,您可以使用React Native提供的Keyboard侦听器添加下边距或填充。

import React, { Component } from 'react';
import { Keyboard, TextInput } from 'react-native';

class Example extends Component {
    componentDidMount () {
        this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow);
        this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);
    }

    componentWillUnmount () {
        this.keyboardDidShowListener.remove();
        this.keyboardDidHideListener.remove();
    }

    _keyboardDidShow () {
        this.setState({
            marginBottom: 400
        })
    }

    _keyboardDidHide () {
        this.setState({
            marginBottom: 0
        })
    }

    render() {
        return (
            <TextInput
                style={{marginBottom: this.state.marginBottom}}
                onSubmitEditing={Keyboard.dismiss}
            />
        );
    }
}