2015-05-16 5 views
10

Mi piacerebbe utilizzare un'immagine di sfondo nella mia app nativa reattiva, l'immagine è più piccola dello schermo, quindi devo allungarla.Come allungare un'immagine statica come sfondo in React Native?

ma non funziona se l'immagine è caricata dal fascio di asset

var styles = StyleSheet.create({ 
    bgImage: { 
    flex: 1, 
    flexDirection: 'row', 
    justifyContent: 'center', 
    alignItems: 'stretch', 
    resizeMode: 'stretch', 
    }, 
    welcome: { 
    fontSize: 20, 
    textAlign: 'center', 
    margin: 10, 
    } 
}); 

<Image source={require('image!background')} style={styles.bgImage}> 
    <Text style={styles.welcome}> 
    Welcome to React Native! 
    </Text> 
</Image> 

Sembra che questo:

enter image description here

tuttavia, tutto funziona bene per un'immagine remota , tramite source={{uri: 'background-image-uri'}}:

enter image description here

+0

Prova 'resizeMode: 'cover''? fare riferimento a: [http://stackoverflow.com/questions/29322973/whats-the-best-way-to-add-a-full-screen-background-image-in-react-native](http://stackoverflow .com/questions/29322973/whats-the-best-way-to-add-a-full-screen-background-image-in-react-native) – ddaaggeett

risposta

8

Il tag immagine in genere non deve essere considerato come una vista contenitore.

Avere un involucro posizionato in modo assoluto che contiene l'immagine (allungato/contenuto) sembra funzionare bene:

var styles = StyleSheet.create({ 
    bgImageWrapper: { 
     position: 'absolute', 
     top: 0, bottom: 0, left: 0, right: 0 
    }, 
    bgImage: { 
     flex: 1, 
     resizeMode: "stretch" 
    }, 
    welcome: { 
     fontSize: 20, 
     textAlign: 'center', 
     margin: 10 
    } 
}); 



<View style={{ flex: 1 }}> 
    <View style={styles.bgImageWrapper}> 
    <Image source={require('image!background')} style={styles.bgImage} /> 
    </View> 
    <Text style={styles.welcome}> 
    Welcome to React Native! 
    </Text> 
</View> 
+5

Sfortunatamente, non funziona per me. E perché "Immagine" non dovrebbe essere trattato come un contenitore, mentre il documento ufficiale suggerisce [Immagine di sfondo tramite Nesting] (https://facebook.github.io/react-native/docs/image.html#background-image-via -nesting)? – xinthink

2

Si può sempre utilizzare il modulo Dimensions per ottenere la larghezza dello schermo e impostare lo stile la larghezza della vostra immagine a tale valore:

var Dimensions = require('Dimensions'); 
var {width, height} = Dimensions.get('window'); 

sembra anche strano che un'immagine remota funziona bene ... si può provare a caricare un'immagine statica locale con il uri synt ascia usando source={{uri: 'local_image_file_name' isStatic: true}}.

+1

Grazie a @dave, penso che il [documento ufficiale] (https://facebook.github.io/react-native/docs/image.html#why-not-automatically-size-everything) lo spiega, 'require (' image! x ') 'produce un oggetto con larghezza e altezza fisse (dimensione dell'immagine):' {"__packager_asset": true, "isStatic": true, "path": "...", "uri": "logo", "width": 591, "altezza": 573} '. Proverò il modulo 'uri' e ti farò sapere il risultato, grazie! – xinthink