2016-05-19 19 views
32

Es scheint, dass mit position:absolute in Verwendung ein Element nicht mit justifyContent oder zentriert werden kann. Es gibt eine Problemumgehung für die Verwendung von marginLeft, aber es wird nicht für alle Geräte angezeigt, auch wenn Dimensionen verwendet werden, um Höhe und Breite des Geräts zu erkennen.React Native absolute Positionierung horizontale Mitte

bottom: { 
    position: 'absolute', 
    justifyContent: 'center', 
    alignItems: 'center', 
    top: height*0.93, 
    marginLeft: width*0.18, 
    }, 
    bottomNav: { 
    flexDirection: 'row', 
    }, 
+0

Hat Ihr Element statische Breite oder Dynamik? – Cherniv

+0

Seine statische Breite. – Hasen

Antwort

71

Wickeln Sie das Kind, das Sie möchten, zentriert in einer Ansicht und machen Sie die Ansicht absolut.

<View style={{position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, justifyContent: 'center', alignItems: 'center'}}> 
    <Text>Centered text</Text> 
</View> 
+9

Sehr nützlich. Es gibt eine nette Abkürzung für diese Stil-Parameter, die vom 'StyleSheet'-Objekt hängen:' ... StyleSheet.absoluteFillObject'. Siehe https://github.com/facebook/react-native/blob/master/Libraries/StyleSheet/StyleSheet.js#L29 – wkw

+1

Macht dies nicht die 'Ansicht', die ALLE anklickbaren Platz auf dem Bildschirm einnehmen? Wenn ich zum Beispiel eine Komponente unter dieser absolut positionierten "Ansicht" hätte, wäre ich nicht in der Lage, Klicks darauf zu registrieren. – James111

+4

@ James111 Es sieht so aus, als könnten Sie 'pointerEvents = 'box-none' hinzufügen, um die Berührungen durch die Ansicht zu übergeben: https://github.com/facebook/react-native/issues/12360 –

5

Sie können absolute Produkte Zentrum von der linken Eigenschaft mit der Breite der Vorrichtung durch zwei geteilte Bereitstellung und die Hälfte des Elements Subtrahieren Sie Breite Zentrum möchten.

Zum Beispiel könnte Ihr Stil in etwa so aussehen.

bottom: { 
    position: 'absolute', 
    left: (Dimensions.get('window').width/2) - 25, 
    top: height*0.93, 
} 
+0

dies funktioniert nur, wenn Sie wissen die Elemente Breite vorher – Adamski

+1

Wenn Sie nicht wissen, dass das Element keine bekannte Breite hat, können Sie onLayout verwenden, um die Elementbreite zu erhalten 'messen (Layout) { const {width} = Layout; this.setState ({width: Breite}) } ... {this.measure (event.nativeEvent.layout)}} ... ' – Corey

Verwandte Themen