Repository navigation
[iOS][Fabric] Text inside Modal keeps its old size after a live text size change (works on 0.86.3) #59375
Description
Description
On iOS with the New Architecture, Text inside a <Modal> doesn't follow a live system text size change. If the text size goes up while the app is open, every Text in the modal keeps the old size, while the TextInputs update. Relaunching fixes it. The same app on 0.86.3 updates correctly.
We hit this in our app through react-native-screens (expo-router native stack), whose screens take the same path, on the simulator and on an iPhone 16 Pro Max with iOS 26.7.1. There a later commit happens to repair the increase, but going from XXXL back to the default size leaves the screen large until it remounts.
What I found with logging in YogaLayoutableShadowNode on 0.88.0:
- On the font scale pass,
configureYogaTreedirties everyParagraphin the modal withmarkDirtyAndPropagate(YogaLayoutableShadowNode.cpp#L507-L512). - The propagation stops at
ModalHostView. Its descriptor callssetSizeinadopt(ModalHostViewComponentDescriptor.h#L31), andsetSizemarks the node withsetDirty(true)without propagating (YogaLayoutableShadowNode.cpp#L596-L606). Yoga'smarkDirtyAndPropagatereturns early on a node that's already dirty (Node.cpp#L453-L461). - So the modal's parent stays clean, Yoga reuses its cached layout,
ModalHostViewnever getshasNewLayout, andlayout()never writes the new metrics to the text nodes.
I haven't bisected 0.87, but #57246 moved the font scale handling into configureYogaTree, which is where this dirty mark starts. Related: #57512. I'm looking at a fix and will link a PR here.
Steps to reproduce
- Clone the reproducer, run
npm install, thencd ios && bundle install && bundle exec pod install. - Run a Release build on an iOS simulator at the default text size.
- With the app open, run
xcrun simctl ui <udid> content_size extra-extra-extra-large(or change Settings > Accessibility > Display & Text Size > Larger Text). - The text in the modal keeps its old size. Only the
TextInputs grow. - Relaunch the app at the same size. Now it's correct.
scripts/capture.sh <udid> runs steps 2 to 5 and saves the screenshots.
React Native Version
0.88.0
Affected Platforms
Runtime - iOS
Output of npx @react-native-community/cli info
System:
OS: macOS 26.7.1
CPU: (14) arm64 Apple M4 Pro
Memory: 2.79 GB / 48.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 22.21.1
path: /Users/simon/.nvm/versions/node/v22.21.1/bin/node
Yarn:
version: 1.22.22
path: /Users/simon/.nvm/versions/node/v22.21.1/bin/yarn
npm:
version: 10.9.4
path: /Users/simon/.nvm/versions/node/v22.21.1/bin/npm
Watchman:
version: 2026.05.25.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.16.2
path: /Users/simon/.rbenv/shims/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 27.0
- iOS 27.1
- macOS 27.0
- tvOS 27.0
- visionOS 27.0
- watchOS 27.0
Android SDK: Not Found
IDEs:
Android Studio: 2025.3 AI-253.32098.37.2534.15336583
Xcode:
version: 27.1/27A9275
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.19
path: /usr/bin/javac
Ruby:
version: 3.2.2
path: /Users/simon/.rbenv/shims/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.2.0
wanted: 20.2.0
react:
installed: 19.3.0
wanted: 19.3.0
react-native:
installed: 0.88.0
wanted: 0.88.0
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: true
newArchEnabled: true
Stacktrace or Logs
No crash, layout only. Trimmed excerpt from the logging I added to YogaLayoutableShadowNode.cpp, on the live change to XXXL. "stored" is layoutMetrics.fontSizeMultiplier, "chain" is the Paragraph's Yoga owners nearest first, and * marks a dirty Yoga node.
pass root=RootView#11 stored=1.000 new=1.353
dirty node=Paragraph#4 stored=1.000 new=1.353 chain=View View ModalHostView* View RootView*
nolayout parent=View#34 child=ModalHostView#32 childStored=1.000 new=1.353 staleTextNodes=7
MANDATORY Reproducer
https://github.com/simongt/rn-modal-text-size-repro
Screenshots and Videos
| Version | Default size | Live change to XXXL | Relaunch at XXXL |
|---|---|---|---|
| 0.88.0 | ![]() |
![]() |
![]() |
| 0.86.3 | ![]() |
![]() |
![]() |
iPhone 17 Pro simulator, iOS 26.5, Release builds with the default prebuilt core.






Activity
r1shabhsharma05 commentedon Oct 22, 2026
/assign