2016-03-24 1 views
3

Lassen Sie uns annehmen, dass wir diejenigen reagieren einheimische Arten haben:Wie auszurichten 2 reagieren nativer Elemente, 1 in den Mittelpunkt und 1 am Anfang

var styles = StyleSheet.create({ 
    parentView:{ 
    width: 400, 
    height:150 
    }, 
    containerView:{ 
    flex:1, 
    flexDirection: 'row', 
    alignItems: 'center', 
    justifyContent: 'center', 
    backgroundColor:'black' 
    }, 
    child1:{ 
    backgroundColor: 'red', 
    alignSelf: 'flex-start' 
    }, 
    child2: { 
    backgroundColor: 'yellow' 
    } 
} 

und dass wir diese Render-Funktion:

render: function(){ 
    return(
     <View style={styles.parentView}> 
     <View style={styles.containerView}> 
      <Text style={styles.child1}>Child1</Text> 
      <Text style={styles.child2}>Child2</Text> 
     </View> 
     </View> 
    ); 
} 

Dieser Code erzeugt dieses Bild: WRONG

aber, was ich erreichen will, ist dieses Bild: enter image description here

sehr sehr wichtig: Ich möchte child2TOTALLY im containerView, und nicht ein bisschen weit nach rechts zentriert sein, weil der Raum, dass child1 einnimmt.

Wie kann ich das in reagieren-native erreichen *

ps: Beachten Sie, dass dies auf viele Auflösungen laufen (viele Bildschirme mit unterschiedlichen Seitenverhältnissen) so kann es nicht in absoluter Weise eingestellt werden, dass würde dazu führen, dass es nur auf "einigen" Bildschirmen funktioniert, aber nicht auf anderen.

Antwort

3

nicht sicher, ob dies der beste Weg ist, es zu tun, aber es funktioniert für mich

render() { 
    return(
     <View style={styles.parentView}> 
     <View style={styles.containerView}> 
     <View style={styles.rowContainer}> 
      <View style={styles.rowItem}> 
      <Text style={styles.child1}>Child1</Text> 
      </View> 
     <View style={styles.rowItem}> 
      <Text style={styles.child2}>Child2</Text> 
     </View> 
     </View> 
     </View> 
    </View> 
); 

const styles = StyleSheet.create({ 
    parentView:{ 
    width: 400, 
    height:150 
    }, 
    containerView:{ 
    flex:1, 
    flexDirection: 'row', 
    alignItems: 'center', 
    backgroundColor:'black' 
    }, 
    rowContainer: { 
    flex: 1, 
    flexDirection: 'column', 
    }, 
    rowItem:{ 
    flex: 1 
    }, 
    child1:{ 
    backgroundColor: 'red', 
    position: 'absolute', 
    }, 
    child2: { 
    alignSelf: 'center', 
    backgroundColor: 'yellow' 
    } 
}); 
+0

auch die Besuche [Reagieren india Dimenstions] (https://facebook.github.io/react-native /docs/dimensions.html), werden Sie in der Lage sein, die Dimensionen des Fensters mit etwas wie zu erhalten 'var {Höhe, Breite} = Dimensions.get ('Fenster');' –

+0

Das funktioniert, aber ich nicht ' Ich verstehe warum. Würdest du ein bisschen erklären, warum das in deiner Antwort Wesley funktioniert? – SudoPlz

+0

Also ich glaube, Sie verstehen den ContainerView-Stil, denn das war ziemlich nahe, wenn nicht genau Ihr Code. Die Ansicht mit rowContainer ändert nur die Flex-Richtung von Zeile zu Spalte, um die Zentrierung von Elementen horizontal zu erleichtern. Da child1 absolut positioniert ist, wird standardmäßig oben links in der übergeordneten Ansicht festgelegt. Außerdem kann child2 die gesamte Zeile verwenden, um den Mittelpunkt zu berechnen. –