Skip to content

fix(macos): keep a TextInput's text in place when it's resized while focused - #3150

Open
Bron Davies (brondavies) wants to merge 1 commit into
microsoft:mainfrom
brondavies:fix/textfield-resize-keeps-editor
Open

Bron Davies (brondavies) wants to merge 1 commit into
microsoft:mainfrom
brondavies:fix/textfield-resize-keeps-editor

Conversation

@brondavies

Copy link
Copy Markdown

Summary:

Fixes #3149. When a focused single-line TextInput is resized, NSTextField moves the field editor's clip view to the cell's drawing rect. That drops the title rect's padding and vertical centering, so the text and placeholder jump to the top of the field.

RCTUITextField now relocates the field editor after a resize, as setTextContainerInset: already does after a padding change. Both share one method, which keeps the selection. It runs only when the size actually changes.

Test Plan:

RNTester-macOS (Debug, arm64, Xcode 27.1, macOS 26.6.2). The Playground had a 40pt search field that shows a Cancel label beside it on focus. I focused it, then read the field editor's clip view from lldb:

  • On main, the clip view goes to y 0 once Cancel narrows the field, and the placeholder draws at the top.
  • With this change, it stays at y 10.5, centered, and the placeholder stays put.

I also narrowed and widened a focused field with "Hello" typed and the caret after "He". The text stayed centered, and the caret stayed at 2.

I didn't test with a real click; focus came from focus(). It's the same in an app on 0.83.0, with padding in place of the centering.

@brondavies
Bron Davies (brondavies) requested a review from a team as a code owner October 23, 2026 23:10
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

Thiago Vinhas (tvinhas) added a commit to tvinhas/react-native-macos that referenced this pull request Oct 28, 2026
Upstream v0.88.1 (30 commits, replayed onto the local v0.88.0 without the
agent files). Conflicts: fork identities and the vlists '*' peer kept;
Hermes 260318099.0.5; RCTStatusBarAppearance, the modal's status bar
capture and RCTRootViewController are iOS-only (macOS has no status bar,
visionOS lacks setNeedsStatusBarAppearanceUpdate); the SwiftUI filter
container sets safeAreaRegions through RCTPlatformHostingController;
SwiftPM autolinking keeps the per-platform UIKit/AppKit linker settings;
RNTester Podfile.lock regenerated with pod install.

Also from microsoft/react-native-macos (open PRs, macOS-only): secure
TextInput focus crash (microsoft#3141), TextInput color for bullets and plain text
(microsoft#3144), TextInput text stays put when resized while focused (microsoft#3150),
ScrollView scrolls over a multiline TextInput (microsoft#3146), inverted lists on
the new architecture (microsoft#3148), press over a TextInput (microsoft#3143), Dimensions
follow window resizes (microsoft#3142, plus removing its observer on invalidate),
RCTView shadow color retained (microsoft#3129), UIImage encoders extern "C"
(microsoft#3140), layout direction constants (microsoft#3131), and codegen skipping
unlinked third-party components (microsoft#3128, upstream react#59067).

.yarnrc.yml preapproves hermes-compiler@260318099.0.5 past the 7-day age
gate.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

TextInput's text jumps to the top when it's resized while focused

1 participant