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

[Android] Content jump in multiline TextInput when adding/removing line of text due to delayed layout update happening after content update #46813

Open
tomekzaw opened this issue Oct 3, 2024 · 0 comments
Labels
Component: TextInput Related to the TextInput component. Needs: Triage 🔍 p: Software Mansion Partner: Software Mansion Partner Platform: Android Android applications. Type: New Architecture Issues and PRs related to new architecture (Fabric/Turbo Modules)

Comments

@tomekzaw
Copy link
Contributor

tomekzaw commented Oct 3, 2024

Description

When adding a new line of text in multiline TextInput component (e.g. after pressing Enter), there's a slight delay between updating the content of the text and updating the height of the component (i.e. layout) on Android with New Architecture enabled.

This causes a content jump (to the top and back to the bottom) visible for one or more frames.

Before adding newline (correct):
Screenshot 2024-10-03 at 16 45 31

After pressing "Enter" (incorrect frame):
Screenshot 2024-10-03 at 16 45 39

After one or more frames (correct):
Screenshot 2024-10-03 at 16 45 47

Video recording:

Screen.Recording.2024-10-03.at.16.39.54.mov

Note that there's also an issue with measuring the height of the last line of the text if it's empty but it's already fixed by @j-piasecki in #42331 as well as by @NickGerleman in #46613 but the issue with content jump still persists.

Steps to reproduce

import {StyleSheet, View, TextInput} from 'react-native';

import React from 'react';

export default function App() {
  return (
    <View style={styles.container}>
      <TextInput multiline style={styles.input} />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
  },
  input: {
    fontSize: 20,
    borderWidth: 1,
    borderColor: 'black',
    width: 300,
    marginTop: 100,
    padding: 0,
  },
});

React Native Version

0.76.0-rc.3

Affected Platforms

Runtime - Android

Areas

Fabric - The New Renderer

Output of npx react-native info

System:
  OS: macOS 15.0
  CPU: (12) arm64 Apple M3 Pro
  Memory: 99.83 MB / 18.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 18.19.0
    path: ~/.nvm/versions/node/v18.19.0/bin/node
  Yarn:
    version: 3.6.4
    path: ~/.nvm/versions/node/v18.19.0/bin/yarn
  npm:
    version: 10.2.3
    path: ~/.nvm/versions/node/v18.19.0/bin/npm
  Watchman:
    version: 2024.09.23.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.14.3
    path: /Users/tomekzaw/.rbenv/shims/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 24.0
      - iOS 18.0
      - macOS 15.0
      - tvOS 18.0
      - visionOS 2.0
      - watchOS 11.0
  Android SDK:
    API Levels:
      - "30"
      - "31"
      - "33"
      - "34"
      - "35"
    Build Tools:
      - 30.0.2
      - 30.0.3
      - 31.0.0
      - 33.0.0
      - 33.0.1
      - 34.0.0
      - 35.0.0
    System Images:
      - android-33 | Google APIs ARM 64 v8a
      - android-34 | Google APIs ARM 64 v8a
    Android NDK: Not Found
IDEs:
  Android Studio: 2024.1 AI-241.18034.62.2412.12266719
  Xcode:
    version: 16.0/16A242d
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.12
    path: /usr/bin/javac
  Ruby:
    version: 2.7.8
    path: /Users/tomekzaw/.rbenv/shims/ruby
npmPackages:
  "@react-native-community/cli":
    installed: 15.0.0-alpha.2
    wanted: 15.0.0-alpha.2
  react:
    installed: 18.3.1
    wanted: 18.3.1
  react-native:
    installed: 0.76.0-rc.3
    wanted: 0.76.0-rc.3
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: true
iOS:
  hermesEnabled: Not found
  newArchEnabled: false

Stacktrace or Logs

No crash or failure

Reproducer

https://github.com/tomekzaw/repro-new-arch-android-textinput

Screenshots and Videos

Screen.Recording.2024-10-03.at.16.39.54.mov
@tomekzaw tomekzaw added Needs: Triage 🔍 Type: New Architecture Issues and PRs related to new architecture (Fabric/Turbo Modules) labels Oct 3, 2024
@facebook-github-bot facebook-github-bot added p: Software Mansion Partner: Software Mansion Partner labels Oct 3, 2024
@react-native-bot react-native-bot added the Component: TextInput Related to the TextInput component. label Oct 3, 2024
@tomekzaw tomekzaw changed the title TextInput content jump when adding/removing line of text due to delayed layout update happening after content update Multiline TextInput content jump when adding/removing line of text due to delayed layout update happening after content update Oct 3, 2024
@tomekzaw tomekzaw changed the title Multiline TextInput content jump when adding/removing line of text due to delayed layout update happening after content update Content jump in multiline TextInput when adding/removing line of text due to delayed layout update happening after content update Oct 3, 2024
@cortinico cortinico changed the title Content jump in multiline TextInput when adding/removing line of text due to delayed layout update happening after content update [Android] Content jump in multiline TextInput when adding/removing line of text due to delayed layout update happening after content update Oct 14, 2024
@cortinico cortinico added the Platform: Android Android applications. label Oct 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Component: TextInput Related to the TextInput component. Needs: Triage 🔍 p: Software Mansion Partner: Software Mansion Partner Platform: Android Android applications. Type: New Architecture Issues and PRs related to new architecture (Fabric/Turbo Modules)
Projects
None yet
Development

No branches or pull requests

4 participants