aspectRatio ignores maxWidth constraint in dimension calculations
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 127k
- Forks
- 25.3k
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 4
Description
Description
When a View has both aspectRatio and maxWidth style properties, the aspect ratio calculation ignores the maxWidth constraint.
While maxWidth is correctly applied to limit the view's final width, aspectRatio appears to compute dimensions based only on explicit or implicit width values, not on the effective constrained width.
Steps to reproduce
- Create a View with aspectRatio: 3 and either:
- No explicit width (flex-based sizing), or
- Explicit width (e.g., width: 300)
- Add maxWidth: 200 (smaller than effective width) to the same View
- Observe the aspect ratio is distorted:
- Width correctly capped at 200px
- Height still calculated from original width (300px)
- Resulting ratio ≠ 3
See repro for full example.
React Native Version
0.85.3
Affected Platforms
Runtime - Android
Output of npx @react-native-community/cli info
System:
OS: macOS 26.5.1
CPU: (8) arm64 Apple M2
Memory: 337.28 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 24.14.1
path: /Users/.../.nvm/versions/node/v24.14.1/bin/node
Yarn:
version: 1.22.22
path: /opt/homebrew/bin/yarn
npm:
version: 11.11.0
path: /Users/.../.nvm/versions/node/v24.14.1/bin/npm
Watchman:
version: 2022.11.28.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.16.2
path: /Users/.../.rbenv/shims/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 25.5
- iOS 26.5
- macOS 26.5
- tvOS 26.5
- visionOS 26.5
- watchOS 26.5
Android SDK:
API Levels:
- "33"
- "34"
- "35"
- "36"
Build Tools:
- 33.0.1
- 34.0.0
- 35.0.0
- 36.0.0
System Images:
- android-29 | Google APIs ARM 64 v8a
- android-37.0 | 16 KB Page Size Google APIs ARM 64 v8a
Android NDK: Not Found
IDEs:
Android Studio: 2025.2 AI-252.25557.131.2521.14344949
Xcode:
version: 26.5/17F42
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.16
path: /usr/bin/javac
Ruby:
version: 2.7.6
path: /Users/.../.rbenv/shims/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.1.0
wanted: 20.1.0
react:
installed: 19.2.3
wanted: 19.2.3
react-native:
installed: 0.85.3
wanted: 0.85.3
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: true
newArchEnabled: true
Stacktrace or Logs
-
MANDATORY Reproducer
https://snack.expo.dev/@andreamartinez/aspectratio-react-native-bug
Screenshots and Videos
Observe how aspectRatio always fails when applying a maxWidth, both on iOS and Android.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the mandatory Expo Snack reproducer and verify the reported cases involving aspectRatio, maxWidth, flex-based sizing, and explicit width on Android. Trace the runtime layout calculation responsible for these constraints; done means a width capped at maxWidth produces a height that preserves the requested aspect ratio, with regression coverage for the reproducer cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, react-native
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100