react / react/react-native

onTextLayout incorrectly returns multiple lines for text that renders in a single line

Ouverte
#54,552 7 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Issue: Author Provided Repro Needs: React Native Team Attention
Langage dominant
C++
Étoiles
127k
Forks
25.3k
Merge moyen
1 j 23 h
PR mergées (30 j)
4

Description

Description

onTextLayout is returning incorrect lines data for simple single-line text.
In previous React Native versions (tested on Expo 52 with react-native 0.79), the lines array matched the actual number of rendered lines. After the latest update (RN 0.81), some texts that clearly render in one line are reported as two lines.

This breaks logic that depends on overflow detection (e.g., switching between normal text and marquee scrolling). Because onTextLayout now gives false positives, it’s impossible to reliably detect when text exceeds one line.

Steps to reproduce

The bug is present in Expo template when created with npx create-expo-app@latest.

  1. Install the dependencies npm install
  2. Open the app in Expo Go application
  3. See the log in terminal. You should see the text is rendered in one line, but onTextLayout gives an array with 2 items.
React Native Version

0.81.5

Affected Platforms

Runtime - Android

Output of npx @react-native-community/cli info
System:
  OS: macOS 26.1
  CPU: (11) arm64 Apple M3 Pro
  Memory: 286.83 MB / 18.00 GB
  Shell:
    version: 3.2.57
    path: /bin/sh
Binaries:
  Node:
    version: 22.12.0
    path: /Users/smhd/.nvm/versions/node/v22.12.0/bin/node
  Yarn: Not Found
  npm:
    version: 10.9.0
    path: /Users/smhd/.nvm/versions/node/v22.12.0/bin/npm
  Watchman:
    version: 2024.12.02.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods: Not Found
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 24.2
      - iOS 18.2
      - macOS 15.2
      - tvOS 18.2
      - visionOS 2.2
      - watchOS 11.2
  Android SDK: Not Found
IDEs:
  Android Studio: 2025.1 AI-251.26094.121.2513.14007798
  Xcode:
    version: 16.2/16C5032a
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.14
    path: /usr/bin/javac
  Ruby:
    version: 2.6.10
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 19.1.0
    wanted: 19.1.0
  react-native:
    installed: 0.81.5
    wanted: 0.81.5
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: Not found
  newArchEnabled: Not found
iOS:
  hermesEnabled: Not found
  newArchEnabled: Not found

info React Native v0.82.1 is now available (your project is running on v0.81.5).
info Changelog: https://github.com/facebook/react-native/releases/tag/v0.82.1
info Diff: https://react-native-community.github.io/upgrade-helper/?from=0.81.5&to=0.82.1
info For more info, check out "https://reactnative.dev/docs/upgrading?os=macos".
Stacktrace or Logs
No stacktrace available. Not related in this case.
MANDATORY Reproducer

https://github.com/SMhdAsadi/onTextLayout-issue-rn81

Screenshots and Videos

This is the first page of a new Expo project in default template:

Image

The title "Welcome!" is rendered in one line, but is reported to be in two lines in onTextLayout prop.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Exécutez le reproducer obligatoire à l’adresse https://github.com/SMhdAsadi/onTextLayout-issue-rn81 avec le template Expo sur Android et inspectez la sortie de onTextLayout pour le texte sur une seule ligne « Welcome! ». Suivez le chemin de mise en page du texte Android de React Native qui produit le lines array. C’est terminé lorsqu’un texte rendu sur une seule ligne signale une ligne sans interrompre la détection des débordements.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
android, react-native
Domaine
mobile-dev
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
55/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.