Description
First, I am aware of the changes made in 0.77 to forced edge-to-edge displays when targeting SDK 35. But I'm concerned that a bug has been introduced in to measure() or measureInWindow().
I have written a small RN project to show what I'm concerned with: https://github.com/dcorbin/LayoutEdgeToEdge. When targeting SDK 35 with this code, I call both methods and they return different values for y. However, if this project is built with targetSDK 34, the report they same Y value. (Screenshots below)
It makes sense to me that the value changes when edge-to-edge is enabled, but given how the views are laid out it seem that it should be the same Y for both methods.
I have seen this behavior cause regressions in two different circumstances where the layout of a view is being used to calculate a relative position of another view.
Probably unrelated, but I am curious why the onLayout information is different than the measure/measureInWindow information.
Steps to reproduce
- Checkout and run the example application.
- Notice the output as it is placed in the view.
React Native Version
0.77.0
Affected Platforms
Runtime - Android
Output of npx @react-native-community/cli info
info Fetching system and libraries information...
System:
OS: macOS 15.4
CPU: (10) arm64 Apple M1 Max
Memory: 4.26 GB / 64.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 20.11.0
path: /usr/local/bin/node
Yarn:
version: 1.22.22
path: ~/.yarn/bin/yarn
npm:
version: 10.2.4
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 24.2
- iOS 18.2
- macOS 15.2
- tvOS 18.2
- visionOS 2.2
- watchOS 11.2
Android SDK:
API Levels:
- "29"
- "31"
- "33"
- "34"
- "35"
Build Tools:
- 29.0.2
- 30.0.3
- 33.0.0
- 33.0.1
- 34.0.0
- 35.0.0
System Images:
- android-21 | Google APIs ARM 64 v8a
- android-23 | ARM 64 v8a
- android-33 | Google APIs ARM 64 v8a
- android-33 | Google APIs Intel x86_64 Atom
- android-33 | Google Play ARM 64 v8a
- android-36 | Google Play ARM 64 v8a
Android NDK: Not Found
IDEs:
Android Studio: 2024.3 AI-243.22562.218.2431.13114758
Xcode:
version: 16.2/16C5032a
path: /usr/bin/xcodebuild
Languages:
Java:
version: 23.0.1
path: /Users/dcorbin/.jenv/shims/javac
Ruby:
version: 3.4.1
path: /Users/dcorbin/.rbenv/shims/ruby
npmPackages:
"@react-native-community/cli":
installed: 15.0.1
wanted: 15.0.1
react:
installed: 18.3.1
wanted: 18.3.1
react-native:
installed: 0.77.0
wanted: 0.77.0
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: Not found
newArchEnabled: false
info React Native v0.78.2 is now available (your project is running on v0.77.0).
info Changelog: https://github.com/facebook/react-native/releases/tag/v0.78.2
info Diff: https://react-native-community.github.io/upgrade-helper/?from=0.77.0&to=0.78.2
info For more info, check out "https://reactnative.dev/docs/upgrading?os=macos".
Stacktrace or Logs
Reproducer
https://github.com/dcorbin/LayoutEdgeToEdge
Screenshots and Videos
targetSdk 35

targetSdk 34

Description
First, I am aware of the changes made in 0.77 to forced edge-to-edge displays when targeting SDK 35. But I'm concerned that a bug has been introduced in to measure() or measureInWindow().
I have written a small RN project to show what I'm concerned with: https://github.com/dcorbin/LayoutEdgeToEdge. When targeting SDK 35 with this code, I call both methods and they return different values for y. However, if this project is built with targetSDK 34, the report they same Y value. (Screenshots below)
It makes sense to me that the value changes when edge-to-edge is enabled, but given how the views are laid out it seem that it should be the same Y for both methods.
I have seen this behavior cause regressions in two different circumstances where the layout of a view is being used to calculate a relative position of another view.
Probably unrelated, but I am curious why the onLayout information is different than the measure/measureInWindow information.
Steps to reproduce
React Native Version
0.77.0
Affected Platforms
Runtime - Android
Output of
npx @react-native-community/cli infoStacktrace or Logs
Reproducer
https://github.com/dcorbin/LayoutEdgeToEdge
Screenshots and Videos
targetSdk 35


targetSdk 34