2016-05-19 35 views
32

Kullanımda position:absolute ile bir öğe justifyContent veya alignItems kullanılarak ortalanamıyor gibi görünüyor. marginLeft'u kullanmak için bir geçici çözüm var, ancak aygıtın yüksekliğini ve genişliğini algılamak için boyutları kullanarak bile tüm aygıtlar için aynı şeyi göstermiyor.React Doğal mutlak konumlandırma yatay merkezi

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

Öğenizin statik genişliği veya dinamik var mı? – Cherniv

+0

Statik genişliği. – Hasen

cevap

71

Görmek istediğiniz çocuğu bir Görünümde ortalayın ve Mutlak olarak görün.

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

Çok kullanışlıdır. StyleSheet 'nesnesinden asılı olan stil paramları için hoş bir kısayol var: ... StyleSheet.absoluteFillObject'. bkz. https://github.com/facebook/react-native/blob/master/Libraries/StyleSheet/StyleSheet.js#L29 – wkw

+1

Bu, 'Görünüm'ün ekrandaki TÜM tıklanabilir alanı almasını sağlamaz mı? E.g, bu kesinlikle konumlandırılmış 'Görünüm' altında bir bileşen olsaydı, tıklamaları kaydedemezdim. – James111

+4

@ James111 Görünümden dokunarak geçmek için 'pointerEvents = 'kutu-none'' ekleyebiliyor gibi görünüyorsunuz: https://github.com/facebook/react-native/issues/12360 –

5

Sen merkezin genişliği istediğiniz elemanın yarısını ikiye cihazın bölünmüş genişliği ile sol özelliğini sağlayan ve dışarı çıkarılarak mutlak öğeleri merkezine alabilirsiniz. Örneğin, stiliniz böyle bir şeye benziyor olabilir.

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

bu yalnızca çalışırsanız çalışır elemanların genişliği önceden – Adamski

+1

Öğenin bilinen bir genişliğe sahip olduğunu bilmiyorsanız, öğelerin genişliğini almak için onLayout kullanabilirsiniz 'tedbir (düzen) { const {width} = layout; this.setState ({genişliği: genişlik}) } ... {this.measure (event.nativeEvent.layout)}} ... ' – Corey