response-native Keyboard.dismiss () не работает после автозаполнения на iOS - PullRequest
2 голосов
/ 16 января 2020

Я занимаюсь разработкой собственного приложения с использованием expo.

На экране входа в систему у меня есть два TextInputs (с именем пользователя и паролем textContentType). У меня есть несколько мест, где я звоню Keyboard.dismiss() (из Touchable, из других кнопок и т. Д. c.), Что прекрасно работает для большинства случаев.

Моя проблема в том, что после того, как я успешно использовал пароль автозаполнение при iOS (по отпечатку пальца) сначала клавиатура автоматически скрывается и снова отображается (запускаются все обычные события клавиатуры), что выглядит странно, но приемлемо, но после этого клавиатура больше не реагирует на любые вызовы Keyboard.dismiss(), пока я не сфокусирую другой TextInput.

Кажется, есть похожая проблема с наложением клавиатуры «использовать надежный пароль».

Здесь мои версии:

"expo": "^34.0.1",
"react": "16.8.3",
"react-dom": "^16.8.6",
"react-native": "https://github.com/expo/react-native/archive/sdk-34.0.0.tar.gz",

Запуск в клиенте Expo на iOS 13.2.3

Заранее благодарю за любую помощь.

Редактировать:

Я сократил проблему до самой базовой c версии. Кнопка отмены работает нормально, пока я не использую автозаполнение пароля на устройстве iOS.

https://github.com/SebastianRoese/tryouts/tree/master/keyboard-dismiss-problem

import React from 'react'
import { View, Button, TextInput, StyleSheet, Keyboard } from 'react-native'

const App = () => {
    return (
        <View style={styles.screen}>
            <TextInput style={styles.textinput} textContentType="username" />
            <TextInput style={styles.textinput} secureTextEntry textContentType="password" />
            <Button title="Dismiss Keyboard" onPress={() => Keyboard.dismiss()} />
        </View>
    )
}

const styles = StyleSheet.create({
    screen: {
        width: '100%',
        height: '100%',
        paddingVertical: '15%',
        backgroundColor: '#1e1e1e',
        alignItems: 'center',
    },
    textinput: {
        marginVertical: 10,
        padding: 10,
        width: '70%',
        height: 40,
        backgroundColor: '#ababab',
    },
})

export default App
...