Text renders 1px bigger than View when explicitly given the same height with a specific combination of height and pixel ratio.
Personne n'a encore pris cette issue.
- Langage dominant
- C++
- Étoiles
- 127k
- Forks
- 25.3k
- Merge moyen
- 1 j 23 h
- PR mergées (30 j)
- 4
Description
Description
Explicitly setting height: 15 on a parent View and child Text on a device with a pixel ratio of 3.5 (Pixel 7 Pro emulator) causes the child Text to render 1 px bigger than the parent View due to rounding in Yoga. When the Text is given a small border (borderWidth: 0.5) the bottom of the border is clipped by the parent View. This only happens with a certain offset from top - achieved for example by setting marginTop: 295.
There are several values and combinations of height and pixelRatio that give this result. I've only observed this on Fabric, on old architecture it renders the same.
Steps to reproduce
- Enable new architecture
- Use the following code:
const print_height = (layout: LayoutRectangle, component: string) => {
const {height} = layout;
console.log(`${component}'s height = ${height}`);
};
const TestApp = () => {
return (
<View
style={styles.View}
onLayout={event => print_height(event.nativeEvent.layout, 'View')}>
<Text
style={styles.Text}
onLayout={event => print_height(event.nativeEvent.layout, 'Text')}>
kkkkkkkk
</Text>
</View>
);
};
const styles = StyleSheet.create({
View: {
justifyContent: 'center',
alignItems: 'center',
overflow: 'hidden',
height: 15,
marginTop: 295,
},
Text: {
fontSize: 8,
overflow: 'hidden',
height: 15,
borderWidth: 0.5,
borderRadius: 4,
},
});
- Run on a device/emulator with
pixelRatio: 3.5(ex. Pixel 7 Pro)
React Native Version
0.73.1
Affected Platforms
Runtime - Android
Areas
Fabric - The New Renderer
Output of npx react-native info
System:
OS: macOS 13.5.2
CPU: (8) arm64 Apple M1 Pro
Memory: 100.84 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 20.8.0
path: /opt/homebrew/bin/node
Yarn:
version: 1.22.21
path: /opt/homebrew/bin/yarn
npm:
version: 10.1.0
path: /opt/homebrew/bin/npm
Watchman:
version: 2023.09.25.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods: Not Found
SDKs:
iOS SDK:
Platforms:
- DriverKit 23.2
- iOS 17.2
- macOS 14.2
- tvOS 17.2
- watchOS 10.2
Android SDK: Not Found
IDEs:
Android Studio: 2022.3 AI-223.8836.35.2231.10406996
Xcode:
version: 15.1/15C65
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.6
path: /usr/bin/javac
Ruby:
version: 3.2.2
path: /opt/homebrew/opt/ruby/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: 18.2.0
react-native:
installed: 0.73.1
wanted: 0.73.1
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: Not found
newArchEnabled: false
Stacktrace or Logs
n\a
Reproducer
https://github.com/zglapa/reproducer_view_text_size
Screenshots and Videos
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
L’issue ne mentionne aucun fichier ni test du dépôt. Commencez par exécuter le reproducer lié avec Fabric activé sur un appareil ou un émulateur Android utilisant un ratio de pixels de 3.5, puis suivez le comportement de l’arrondi de la mise en page dans le chemin Fabric/Yoga. Le travail est terminé lorsque les hauteurs explicitement égales de View et Text restent égales et que la bordure d’un demi-pixel n’est pas rognée pour la reproduction signalée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- android, react
- Domaine
- mobile-dev
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100