Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calling Keyboard.dismiss() in a button is scrolling to focused input in iOS #41605

Open
lucasbasquerotto opened this issue Nov 22, 2023 · 2 comments
Labels

Comments

@lucasbasquerotto
Copy link

lucasbasquerotto commented Nov 22, 2023

Description

I have a form with several fields (TextField) and in the end a button that sends the form data to a server and navigates to another screen if successful.

When I'm clicking the button, I dismiss the keyboard and that is causing the last modified input to be focused (it's scrolled into view). Even if I change the button (a Pressable) to only call Keyboard.dismiss(), this issue still happens.

From what I tested this only happens if I type characters in the input: if I only tap the input so that it has focus, it works fine; if I only delete some characters it also works fine, that is, the input is not focused (and scrolled to) when I call Keyboard.dismiss().

This only happens in iOS (in Android, it works correctly, without scrolling to the input).

It also works if I click in the keyboard "Return" button before clicking the button (it closes the keyboard, but doesn't scroll to the field). If there is a way to trigger it programatically, it could be used as a workaround.

React Native Version

0.72.7

Output of npx react-native info

System:
  OS: Linux 5.4 Ubuntu 20.04.6 LTS (Focal Fossa)
  CPU: (4) x64 Intel(R) Core(TM) i7-3537U CPU @ 2.00GHz
  Memory: 3.02 GB / 11.57 GB
  Shell:
    version: 5.0.17
    path: /bin/bash
Binaries:
  Node:
    version: 16.20.2
    path: /usr/bin/node
  Yarn: Not Found
  npm:
    version: 8.19.4
    path: /usr/bin/npm
  Watchman:
    version: 20221204.222904.0
    path: /usr/local/bin/watchman
SDKs:
  Android SDK: Not Found
IDEs:
  Android Studio: AI-203.7717.56.2031.7621141
Languages:
  Java:
    version: 11.0.20.1
    path: /usr/bin/javac
  Ruby: Not Found
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.72.7
    wanted: 0.72.7
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: Not found
  newArchEnabled: Not found
iOS:
  hermesEnabled: Not found
  newArchEnabled: Not found

Steps to reproduce

Have a form with several TextField components and a button at the end. Call Keyboard.dismiss() in the button. Make it so that when you go to the end of the screen, the first fields are not visible.

Type anything in one of the first fields (it can be any field, as long as it's not visible in the end of the screen).

Let the keyboard open, then go to the end of the screen and tap the button (you can also tap outside of any field to close the keyboard).

If you are using iOS, the Textfield is focused (the screen will scroll and focus it).

Snack, screenshot, or link to a repository

https://snack.expo.dev/@lucas99freelas/textfield-keyboard-ios?platform=ios

Copy link

⚠️ Newer Version of React Native is Available!
ℹ️ You are on a supported minor version, but it looks like there's a newer patch available - 0.72.7. Please upgrade to the highest patch for your minor or latest and verify if the issue persists (alternatively, create a new project and repro the issue in it). If it does not repro, please let us know so we can close out this issue. This helps us ensure we are looking at issues that still exist in the most recent releases.

@lucasbasquerotto
Copy link
Author

This issue also happens using react-native 0.72.7

@cortinico cortinico added the Issue: Author Provided Repro This issue can be reproduced in Snack or an attached project. label Nov 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants