Ich versuche, eine Liste der Bilder in einem Bildlauf anzuzeigen. Die Breite sollte 100% betragen, während die Höhe automatisch sein sollte und das Seitenverhältnis beibehalten sollte.
Die Durchsuchungen, die ich durchführte, wiesen auf verschiedene Lösungen hin, die den Hintergrund für den Vollbildmodus darstellen.
const styles = StyleSheet.create({
image: {
width: null,
height: 300,
resizeMode: 'cover'
}
});
<ScrollView style={{flex: 1}}>
<Image style={styles.image} source={require('../../../images/collection-imag1.png')}/>
<Image style={styles.image} source={require('../../../images/collection-imag2.png')}/>
</ScrollView>
Ich habe verschiedene Kombinationen von width ausprobiert: null, height: null, flex: 1, alignSelf usw. Die obige Lösung funktioniert fast, außer dass die Höhe nicht dynamisch ist. Teile des Bildes sind nicht sichtbar.
"resizeMode"
ist keine Stileigenschaft. Sollte zu Props
der Image-Komponente wie im folgenden Code wechseln.
const win = Dimensions.get('window');
const styles = StyleSheet.create({
image: {
flex: 1,
alignSelf: 'stretch',
width: win.width,
height: win.height,
}
});
...
<Image
style={styles.image}
resizeMode={'contain'} /* <= changed */
source={require('../../../images/collection-imag2.png')} />
...
Die Bildhöhe wird nicht automatisch angepasst, da die Image -Komponente sowohl Breite als auch Höhe in style props
benötigt wird. Sie müssen also mit der getSize () - Methode selbst berechnen, und Sie können in diese Antwort sehen.
Es gibt viele nützliche Open-Source-Bibliotheken. Die Liste wird unten angezeigt.
Nachdem ich eine Weile darüber nachgedacht hatte, konnte ich die Höhe erreichen: auto in reaktionsnativem Bild ... Sie müssen die Abmessungen Ihres Bildes kennen, damit dieser Hack funktioniert. Öffnen Sie einfach Ihr Bild in einem beliebigen Bildbetrachter, und Sie erhalten die Abmessungen Ihres Bildes in den Dateiinformationen Die von mir verwendete Bildgröße beträgt 541 x 362
Importiere zuerst Dimensionen von React-Native
import { Dimensions } from 'react-native';
dann müssen Sie die Abmessungen des Fensters ermitteln
const win = Dimensions.get('window');
Berechne jetzt das Verhältnis als
const ratio = win.width/541; //541 is actual image width
jetzt das Bild als Stil hinzufügen
imageStyle: {
width: win.width,
height: 362 * ratio, //362 is actual height of image
}
Sie müssen immer die Breite und Höhe einer Image
einstellen. Es wird nicht automatisch die Größe für Sie ändern. Die React Native-Dokumente sagt so .
Sie sollten die Gesamthöhe der ScrollView
mit onLayout
messen und die Höhe der Image
s basierend darauf festlegen. Wenn Sie resizeMode
von cover
verwenden, bleibt das Seitenverhältnis Ihrer Image
s erhalten, aber es wird offensichtlich zugeschnitten, wenn es größer als der Container ist.
Für das Image-Tag können Sie diese Art von Stil verwenden.
imageStyle: {
width: Dimensions.get('window').width - 23,
resizeMode: "contain",
height: 211,
},
Ich hatte Probleme mit allen oben genannten Lösungen. Schließlich habe ich aspectRatio verwendet, um den Trick zu machen. Wenn Sie die Bildbreite und -höhe kennen und diese groß sind, berechnen Sie einfach aspectRatio und fügen Sie sie dem Bild wie folgt hinzu:
<PhotoImage
source={{uri: `data:image/jpeg;base64,${image.base64}`}}
style={{ aspectRatio: image.width / image.height }}
/>
AspectRatio ist eine Layout-Eigenschaft von React Native, um das Seitenverhältnis des Bildes beizubehalten und in den übergeordneten Container zu passen: https://facebook.github.io/react-native/docs/ Layout-Requisiten # Seitenverhältnis