2016-05-19 1 views
32

Il semble qu'avec position:absolute en cours d'utilisation un élément ne peut pas être centré en utilisant justifyContent ou alignItems. Il existe une solution de contournement pour utiliser marginLeft mais n'affiche pas la même chose pour tous les périphériques, même en utilisant des dimensions pour détecter la hauteur et la largeur du périphérique. Enveloppez l'enfant que vous voulez centré dans une vue et définissez la vue comme absolue.Réagir Positionnement natif absolu centre horizontal

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

Est-ce que votre élément a une largeur statique ou dynamique? – Cherniv

+0

Sa largeur statique. – Hasen

Répondre

71

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

Très utile. Il y a un bon raccourci pour les params de style qui se détachent de l'objet 'StyleSheet':' ... StyleSheet.absoluteFillObject'. voir https://github.com/facebook/react-native/blob/master/Libraries/StyleSheet/StyleSheet.js#L29 – wkw

+1

Est-ce que cela ne fait pas que 'View' occupe TOUT l'espace cliquable sur l'écran? Par exemple si j'avais un composant en dessous de ce 'View' positionné de manière absolue, je ne serais pas capable d'enregistrer des clics dessus. – James111

+4

@ James111 Il semble que vous pouvez ajouter 'pointerEvents = 'box-none'' pour passer les touches à travers la vue: https://github.com/facebook/react-native/issues/12360 –

5

Vous pouvez centrer les éléments absolus en fournissant des biens laissés à la largeur du dispositif divisé par deux et en soustrayant la moitié de l'élément que vous souhaitez à la largeur du centre. Par exemple, votre style pourrait ressembler à ceci.

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

cela ne fonctionne que si vous connaissez la largeur des éléments au préalable – Adamski

+1

Si vous ne savez pas que l'élément n'a pas de largeur connue, vous pouvez utiliser onLayout pour obtenir la largeur des éléments 'measure (layout) { const {width} = layout; this.setState ({width: largeur})} ... {this.measure (event.nativeEvent.layout)}} ... ' – Corey