Description
After upgrading from React Native 0.83.2 to 0.84.0, ScrollView and FlatList content becomes invisible on iOS when navigating to the same screen a second time while RTL mode is active (I18nManager.forceRTL(true)). The content renders correctly on the first visit but disappears on subsequent navigations. This is a regression — 0.83.2 works correctly, on Android 0.84.0.
Expected behavior
ScrollView/FlatList content should render correctly on every navigation, regardless of how many times the screen has been visited.
Actual behavior
- First visit: Content renders correctly
- Second visit: Content is invisible (some screens show content "pushed to the side, barely visible")
- Third visit: Content completely invisible
Key observations from debugging
- React-side layout values are correct —
onLayout reports identical dimensions on both first and second visits (e.g., container: 402x768, scrollView: 402x682, contentSize: 402x839)
- Components DO mount and render —
console.log in render confirms execution
- This is a native iOS rendering issue, not a React rendering issue
- LTR mode works perfectly — switching to English (LTR) eliminates the bug entirely
- Setting
direction: 'ltr' (opposite of RTL) on a wrapper View fixes the issue — but this breaks LTR mode, confirming it's related to how the native direction style property interacts with I18nManager.forceRTL
- Affects ALL screens with ScrollView/FlatList, not specific components
- Not related to Modals, navigation transitions, or
react-native-screens
- Switching to
@react-navigation/native-stack does NOT fix the issue — confirming it's a core RN problem
React Native Version
- Broken: 0.84.0 (IOS)
- Working: 0.83.2
Environment
- React Native: 0.84.0
- React: 19.2.0
- @react-navigation/stack: 7.8.2
- @react-navigation/native: 7.1.31
- react-native-screens: 4.24.0
- Xcode: 16.x
- iOS Simulator: iPhone (various models)
- New Architecture (Fabric): enabled (default in 0.84)
Steps to reproduce
- Enable RTL mode:
I18nManager.forceRTL(true)
- Use
@react-navigation/stack (JS-based stack navigator) with TransitionPresets.SlideFromRightIOS
- Navigate to any screen containing a
ScrollView or FlatList
- Go back
- Navigate to the same screen again
- Content is invisible — the screen renders, but ScrollView/FlatList children are not visible
React Native Version
0.84.0
Affected Platforms
Runtime - iOS
Output of npx @react-native-community/cli info
info Fetching system and libraries information...
System:
OS: macOS 26.3
CPU: (8) arm64 Apple M3
Memory: 140.75 MB / 8.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 22.11.0
path: /usr/local/bin/node
Yarn:
version: 1.22.22
path: /opt/homebrew/bin/yarn
npm:
version: 11.10.0
path: /usr/local/bin/npm
Watchman:
version: 2024.12.02.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.16.2
path: /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 25.2
- iOS 26.2
- macOS 26.2
- tvOS 26.2
- visionOS 26.2
- watchOS 26.2
Android SDK: Not Found
IDEs:
Android Studio: 2025.3 AI-253.29346.138.2531.14876573
Xcode:
version: 26.3/17C529
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.13
path: /usr/bin/javac
Ruby:
version: 2.6.10
path: /usr/bin/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.0.0
wanted: 20.0.0
react:
installed: 19.2.0
wanted: 19.2.0
react-native:
installed: 0.83.2
wanted: 0.83.2
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: true
newArchEnabled: true
info React Native v0.84.1 is now available (your project is running on v0.83.2).
info Changelog: https://github.com/facebook/react-native/releases/tag/v0.84.1
info Diff: https://react-native-community.github.io/upgrade-helper/?from=0.83.2&to=0.84.1
info For more info, check out "https://reactnative.dev/docs/upgrading?os=macos".
Stacktrace or Logs
logs `onLayout` reports identical dimensions on both first and second visits (e.g., container: 402x768, scrollView: 402x682, contentSize: 402x839)
MANDATORY Reproducer
https://github.com/react-native-community/reproducer-react-native/blob/main/ReproducerApp/package.json
Screenshots and Videos
No response
Description
After upgrading from React Native 0.83.2 to 0.84.0, ScrollView and FlatList content becomes invisible on iOS when navigating to the same screen a second time while RTL mode is active (
I18nManager.forceRTL(true)). The content renders correctly on the first visit but disappears on subsequent navigations. This is a regression — 0.83.2 works correctly, on Android 0.84.0.Expected behavior
ScrollView/FlatList content should render correctly on every navigation, regardless of how many times the screen has been visited.
Actual behavior
Key observations from debugging
onLayoutreports identical dimensions on both first and second visits (e.g., container: 402x768, scrollView: 402x682, contentSize: 402x839)console.login render confirms executiondirection: 'ltr'(opposite of RTL) on a wrapper View fixes the issue — but this breaks LTR mode, confirming it's related to how the nativedirectionstyle property interacts withI18nManager.forceRTLreact-native-screens@react-navigation/native-stackdoes NOT fix the issue — confirming it's a core RN problemReact Native Version
Environment
Steps to reproduce
I18nManager.forceRTL(true)@react-navigation/stack(JS-based stack navigator) withTransitionPresets.SlideFromRightIOSScrollVieworFlatListReact Native Version
0.84.0
Affected Platforms
Runtime - iOS
Output of
npx @react-native-community/cli infoStacktrace or Logs
MANDATORY Reproducer
https://github.com/react-native-community/reproducer-react-native/blob/main/ReproducerApp/package.json
Screenshots and Videos
No response