-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Different handling of aspect ratio on flexible items compared to CSS #1418
Comments
@NickGerleman spent some time digging into this. The issue is how the combination of aspectRatio + alignItems stretch is being treated in browser vs yoga. Aspect ratio is initially used to calculate the dimension in both browser and yoga but if the align items is set to stretch then the child will grow to the cross axis flex line dimension in browser whereas in yoga it'll always respect the aspect ratio. In the below line, if we don't consider aspect ratio when align items is stretch, we get the same result in browser and yoga. yoga/yoga/algorithm/CalculateLayout.cpp Line 1886 in bac658b
Try below snippet without gap. It also varies between browser and yoga. I can also see some more inconsistencies in margin and aspect ratio behavior. There is some issue in how aspect ratio is treated compared to browser. I'll dig with the specs and update when I have more findings. <View style={{ flex: 1, overflow: "scroll" }}>
<View style={{ flexDirection: "row", backgroundColor: "red" }}>
<View
style={{
flex: 2,
aspectRatio: 1,
backgroundColor: "blue",
}}
/>
<View style={{ width: 5 }} />
<View style={{ flex: 1 }}>
<View
style={{
flex: 1,
aspectRatio: 1,
backgroundColor: "blue",
}}
/>
<View style={{ height: 5 }} />
<View style={{ flex: 1, aspectRatio: 1, backgroundColor: "blue" }} />
</View>
</View>
</View>; |
@intergalacticspacehighway great work, as always 🙂. @nicoburns helpfully created #1295 a while back with a set of fixtures used by Taffy for aspect ratio, showing differences between Yoga and browser behavior. The story here being that aspectRatio in Yoga predates the aspectRatio property in CSS. I will retitle this issue for clarity, since it seems like we think the root issue here is around Yogas handling of aspect ratio for flexible items (at least for stretched cross axis). |
Related, even with the workaround I've posted ( |
Description
Here's the reproducing code:
On the web,
gap
works as expected (no red line at the bottom):On both Android and iOS, there is a red line at the bottom:
It seems like nested
gap
properties combined withaspectRatio
andflex
don't work correctly insideScrollView
.Interesting to note:
ScrollView
fixes itflex
withflexGrow
on the immediate children offlexDirection: 'row',
also fixes it (but this would break the web so has to be conditional)React Native Version
0.72.5
Output of
npx react-native info
System:
OS: macOS 13.2.1
CPU: (10) arm64 Apple M1 Max
Memory: 6.23 GB / 64.00 GB
Shell:
version: 5.8.1
path: /bin/zsh
Binaries:
Node:
version: 18.17.1
path: /usr/local/bin/node
Yarn:
version: 1.22.19
path: /usr/local/bin/yarn
npm:
version: 9.6.7
path: /usr/local/bin/npm
Watchman:
version: 2023.01.30.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.11.3
path: /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 22.4
- iOS 16.4
- macOS 13.3
- tvOS 16.4
- watchOS 9.4
Android SDK: Not Found
IDEs:
Android Studio: 2022.1 AI-221.6008.13.2211.9514443
Xcode:
version: 14.3.1/14E300c
path: /usr/bin/xcodebuild
Languages:
Java:
version: javac 18
path: /usr/bin/javac
Ruby:
version: 2.7.6
path: /Users/dan/.rbenv/shims/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: 18.2.0
react-native:
installed: 0.72.5
wanted: 0.72.5
react-native-macos: Not Found
npmGlobalPackages:
"react-native": Not Found
Android:
hermesEnabled: true
newArchEnabled: false
iOS:
hermesEnabled: true
newArchEnabled: false
Steps to reproduce
See above.
Snack, screenshot, or link to a repository
https://snack.expo.dev/WvNJKiWAi
The text was updated successfully, but these errors were encountered: