2016-05-19 17 views
32

Sembra che con position:absolute in uso un elemento non possa essere centrato utilizzando justifyContent o alignItems. C'è una soluzione alternativa per utilizzare marginLeft ma non viene visualizzata la stessa per tutti i dispositivi, anche utilizzando le dimensioni per rilevare l'altezza e la larghezza del dispositivo.React Nativo posizionamento assoluto centro orizzontale

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

Il tuo elemento ha larghezza o dinamica statica? – Cherniv

+0

La sua larghezza statica. – Hasen

risposta

71

Avvolgere il bambino che si desidera centrare in una vista e rendere assoluta la vista.

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

Molto utile. C'è una bella scorciatoia per quei parametri di stile che pendono dall'oggetto 'StyleSheet':' ... StyleSheet.absoluteFillObject'. vedi https://github.com/facebook/react-native/blob/master/Libraries/StyleSheet/StyleSheet.js#L29 – wkw

+1

Questo non fa in modo che 'View' occupi tutto lo spazio cliccabile sullo schermo? Ad esempio, se avessi un componente sotto questo 'View' assolutamente posizionato, non sarei in grado di registrare i clic su di esso. – James111

+4

@ James111 Sembra che tu possa aggiungere 'pointerEvents = 'box-none'' per passare i tocchi attraverso la vista: https://github.com/facebook/react-native/issues/12360 –

5

È possibile centrare gli elementi assoluti, fornendo la proprietà sinistra con la larghezza del dispositivo diviso per due e sottraendo dalla metà del elemento che desideri la larghezza del centro.

Ad esempio, il tuo stile potrebbe essere simile a questo.

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

funziona solo se sai la larghezza degli elementi in anticipo – Adamski

+1

Se non si conosce che l'elemento non ha una larghezza nota, è possibile utilizzare onLayout per ottenere la larghezza degli elementi 'measure (layout) { const {width} = layout; this.setState ({width: larghezza})} ... {this.measure (event.nativeEvent.layout)}} ... ' – Corey

Problemi correlati