Automatique de l'échelle de hauteur de l'image à Réagir Natif
Dans mon Réagir application Native, je suis récupérer des images à partir d'une API avec des inconnus dimensions. Comment puis-je l'échelle automatique de la hauteur si je sais que ma largeur désirée?
Exemple:
J'ai défini la largeur de Dimensions.get('window').width
. Comment définir la hauteur et de garder le même ratio?
export default class MyComponent extends Component {
constructor(props) {
super(props)
this.state = {
imgUrl: 'http://someimg.com/coolstuff.jpg'
}
}
componentDidMount() {
//sets the image url to state
this.props.getImageFromAPi()
}
render() {
return (
<View>
<Image
source={uri: this.state.imgUrl}
style={styles.myImg}
/>
<Text>Some description</Text>
</View>
)
}
}
const styles = StyleSheet.create(
myImg: {
width: Dimensions.get('window').width,
height: >>>???what goes here???<<<
}
)
- Jetez un oeil à réagissent-native-évolutif-image
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Je suis de passage à l'URL comme un accessoire appelé
uri
. Vous pouvez spécifier votrewidth
accessoire commeDimensions.get('window').width
et qui devrait couvrir.Noter que cela fonctionne aussi si vous savez ce que vous voulez définir la hauteur et vous avez besoin de redimensionner la largeur de maintenir le rapport. Dans ce cas, vous devez spécifier le
height
prop à la place de lawidth
un.resizeMode
prop dans leImage
de la classe et de l'application d'unflex
dans vos styles. J'ai d'abord essayé cela, mais je n'ai pas aimé la façon dont le conteneur de hauteur ne voudrais pas le développer en fonction de l'image mise à l'échelle.uri
prop.return ( <Image source={{uri:myImage4}} style={{height: this.state.height, width: this.state.width}}/> );
OùmyImage4
estvar myImage4='http://theSourceOfImage.com'
Mais sa ne fonctionne pas.Il y a une propriété resizeMode mis à 'contenir'
Exemple:
Source: https://facebook.github.io/react-native/docs/image#resizemode
Jetez un oeil à cette bibliothèque réagir-native-évolutif-image. C'est exactement ce que vous demandez.
Tapuscrit version de @TheJizel répondre avec, en option,
style
propriété etfailure
rappel dansImage.getSize
:Exemple d'utilisation:
D'abord essayer cela et voir si cela fonctionne pour vous: https://github.com/facebook/react-native/commit/5850165795c54b8d5de7bef9f69f6fe6b1b4763d
Si elle ne le fait pas, alors vous pouvez mettre en place votre propre composant de l'image. Mais au lieu de prendre la largeur prop, vous remplacer
onLayout
méthode qui vous donne à la largeur désirée de sorte que vous pouvez calculer la hauteur. Cela fonctionne mieux si vous ne connaissez pas la largeur et souhaitez RN à faire la mise en page pour vous. L'inconvénient estonLayout
est appelée après un passage de la présentation et le rendu. Donc, vous remarquerez peut-être vos composants à se déplacer un peu.Voici un résumé pour une jolie solution simple qui exploite @Li Haitaoproposition d'utiliser aspectRatio:
https://gist.github.com/tpraxl/02dc4bfcfa301340d26a0bf2140cd8b9
De la magie et des calculs nécessaires. Pure "CSS" si vous connaissez l'origine de l'image dimensions.
La solution proposée fonctionne, mais vous devez télécharger l'image, une fois pour déterminer la taille et une autre pour en montrer l'image, c'est une approche différente, l'image est chargée, au carré d'abord et redimensionnée.
Basé sur @TheJizel idée, j'ai fait cuire quelque chose à l'aide de la aspectRatio propriété de style. La classe suivante fonctionne lorsque la largeur est définie, mais la hauteur est omis. Cela fonctionne aussi avec des pourcentages de largeur.
Utilisation:
Vous avez 3 numéros :
et vous devriez mettre "la largeur de l'Écran" dans la largeur de style et aussi de calculer
hauteur de l'installation dans le style ??!!
et