react / react/react-native

aspectRatio ignores maxWidth constraint in dimension calculations

Đang mở
#57,304 1 bình luận 2 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Needs: Triage :mag:
Ngôn ngữ chính
C++
Star
127k
Fork
25.3k
Merge trung bình
1 ngày 23 giờ
Pull request đã merge (30 ngày)
4

Mô tả

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
  1. 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
  1. 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.

Image Image

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với trình tái hiện Expo Snack bắt buộc và xác minh các trường hợp được báo cáo liên quan đến aspectRatio, maxWidth, việc định kích thước dựa trên flex và chiều rộng tường minh trên Android. Truy vết phép tính layout tại runtime chịu trách nhiệm cho các ràng buộc này; công việc được xem là hoàn tất khi một chiều rộng bị giới hạn bởi maxWidth tạo ra chiều cao vẫn giữ nguyên tỷ lệ khung hình được yêu cầu, với độ bao phủ hồi quy cho các trường hợp trong trình tái hiện.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
android, react-native
Lĩnh vực
mobile
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
48/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.