2015-05-16 5 views
10

Ich möchte ein Hintergrundbild in meiner nativen App verwenden, das Bild ist kleiner als der Bildschirm, also muss ich es dehnen.Wie dehnt man ein statisches Bild als Hintergrund in React Native?

aber es funktioniert nicht, wenn das Bild aus dem Asset-Bundle

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> 

es sieht wie folgt geladen ist:

enter image description here

aber es funktioniert gut für ein Remote-Bild , durch source={{uri: 'background-image-uri'}}:

enter image description here

+0

Versuchen Sie 'resizeMode: 'cover''? siehe: [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-weg-zu-hinzufügen-ein-bildschirm-hintergrundbild-in-reaktion-native) – ddaaggeett

Antwort

8

Das Image-Tag sollte generell nicht als Containeransicht behandelt werden.

ein absolut positionierte Wrapper mit Ihrem (gestreckt/enthalten) Image scheint gut zu funktionieren:

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

Leider funktioniert es nicht für mich. Und warum 'Image' nicht als Container behandelt werden sollte, während das offizielle Dokument [Background Image via Nesting] (https://facebook.github.io/react-native/docs/image.html#background-image-via (nesting)? – xinthink

2

Sie immer die Dimensions Modul nutzen, um die Breite des Bildschirms zu erhalten und Ihre Bildbreite Stil auf dieser Wert:

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

Es scheint auch seltsam, dass ein Remote-Bild funktioniert gut ... Sie können versuchen, ein lokales statisches Bild mit dem uri synt Laden bis Axt mit source={{uri: 'local_image_file_name' isStatic: true}}.

+1

Danke @dave, ich denke das [offizielle Dokument] (https://facebook.github.io/react-native/docs/image.html#why-not-automatic-size-everything) erklärt es, 'require (' image! x ') 'ergibt ein Objekt mit fester Breite und Höhe (Größe des Bildes):' {"__packager_asset": true, "isStatic": true, "path": "...", "uri": "logo", "width": 591, "height": 573} '. Ich werde die 'uri' Form versuchen und Sie das Ergebnis wissen lassen, thx! – xinthink