Skip to content

fix(fabric): fix Text overflow in ScrollView on first render (macOS)#2880

Open
Saadnajmi wants to merge 1 commit intomicrosoft:mainfrom
Saadnajmi:fix-scrollview-text-overflow-first-render
Open

fix(fabric): fix Text overflow in ScrollView on first render (macOS)#2880
Saadnajmi wants to merge 1 commit intomicrosoft:mainfrom
Saadnajmi:fix-scrollview-text-overflow-first-render

Conversation

@Saadnajmi
Copy link
Copy Markdown
Collaborator

@Saadnajmi Saadnajmi commented Mar 31, 2026

Summary

  • Add a layoutSubviews override in RCTScrollViewComponentView on macOS that resets the _containerView (documentView) frame to _contentSize after AppKit's autoresizing corrupts it
  • This fixes massive horizontal and vertical overflow when Text is nested inside a ScrollView on the first render

Root Cause

On macOS, the _containerView serves as the NSScrollView's documentView, whose frame directly determines the scrollable content area (unlike iOS where UIScrollView.contentSize is a separate property).

React's layout system explicitly manages _containerView.frame via updateState: to match the content bounding rect. However, autoresizingMask caused AppKit to also resize the container whenever the NSClipView resized (e.g., during initial tile after mounting). This added the clip view's size delta to the container's dimensions, inflating it well beyond the correct content size.

The layoutSubviews override runs after AppKit's layout pass (which triggers autoresizing), so it reliably corrects the frame back to the React-managed _contentSize.

The issue self-corrects on window resize because the size change triggers a React re-layout that overwrites the corrupted frame with fresh measurements.

Test plan

Before (bug) After (fix)

Fixes #2857

🤖 Generated with Claude Code

@Saadnajmi Saadnajmi requested a review from a team as a code owner March 31, 2026 23:19
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 31, 2026

⚠️ No Changeset found

Latest commit: f3650be

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

On macOS, the _containerView (NSScrollView's documentView) has
autoresizingMask set so it fills the visible area before React's first
layout pass. However, AppKit's autoresizing corrupts the documentView's
frame by adding the NSClipView's size delta to the container's
dimensions (e.g., during initial tile or window attachment), inflating it
well beyond the correct content size and producing massive horizontal and
vertical overflow on first render.

The fix adds a layoutSubviews override on macOS that resets the
documentView frame to the correct React-managed content size after
AppKit's layout pass (which triggers autoresizing). This corrects the
corruption while preserving the autoresizingMask needed for the
documentView to fill the visible area before React's first updateState.

Fixes microsoft#2857

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Saadnajmi Saadnajmi force-pushed the fix-scrollview-text-overflow-first-render branch from 731e9fe to f3650be Compare April 1, 2026 18:39
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.

Text inside the ScrollView has massive vertical and horizontal overflow on the first render

1 participant