2015-10-27 24 views
22

Bir görüntüde bir "yeniden boyutlandırma" modu varsa, görüntüdeki ortadaki görüntüyü hizalayacak/haklı gösterecek gibi görünüyor, ancak görüntü içeriği esnek başlangıçta hizalanmış/gerekçelendirilmiş.React Native - resizeMode ile dikey hizalama resmi "içerir" "içerir"

<Image resizeMode="contain" ...> 
<Text>Title</Text> 
</Image> 

Aşağıdaki ile görüntünün üstünde görünen metni görüyorum.

İçerdiği görüntüyü dikey olarak üst üste hizalamanın bir yolu var mı?

+2

Bunu hiç anladın mı? Yayınınız bu soruna çevrimiçi olarak ulaştığım tek referanstır. Sahip olduğunuz ek bilgileri paylaştığınız için teşekkür ederiz. – bgolson

+0

Aynı sorun benim için. Ama ** Image ** 'i başka bir bileşenle değiştirirsem iyi olur. Neden ** Image ** çok özel? –

+0

Bence Kyle'ın aradığı etki, CSS mülkiyeti arka planında (https://developer.mozilla.org/en-US/docs/Web/CSS/background-position) web üzerinde gerçekleştiriliyor. Ayrıca bu sorunu çözmeye çalışıyorum. Kapağı kullanırken veya içerdiğinde, görüntüde her zaman dikey ve yatay olarak görüntüyü istemiyorum. – SomethingOn

cevap

2

İstediğiniz dikey hizalamayı ayarlamak için Görüntünüzde stiller kullanmanız gerekir.

var SampleApp = React.createClass({ 
    render: function() { 
    return (
     <View style={styles.container}> 
     <Image source={{uri: "http://placekitten.com/300/505"}} style={styles.image}> 
      <Text style={styles.instructions}> 
      Hello ! 
      </Text> 
     </Image> 
     </View> 
    ); 
    } 
}); 

var styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    justifyContent: 'center', 
    alignItems: 'stretch', 
    backgroundColor: '#F5FCFF', 
    }, 
    image: { 
    height: 500, 
    justifyContent: "space-around", // <-- you can use "center", "flex-start", 
    resizeMode: "contain",    //  "flex-end" or "space-between" here 
    }, 
    instructions: { 
    textAlign: 'center', 
    color: 'white', 
    backgroundColor: "transparent", 
    fontSize: 25, 
    }, 
}); 

çalışan bir örneğin https://rnplay.org/apps/9D5H1Q bakın

+1

Merhaba, yanıt verdiğiniz için teşekkürler. Ne yazık ki bu, karşılaştığım problemi tam olarak çözmüyor. Https://rnplay.org/apps/9qKrYA adresinden bir örnek ekledim. Esnek başlangıçta bile gerçek görüntünün merkezde olduğuna dikkat edin. http://prntscr.com/8wc3cf –

+0

Tam olarak ne elde etmeye çalışıyorsunuz? Boyaya çizebilir misin? Altlarında beyaz boşluk bulunan satırların üstünde (dikey olarak) görüntülerin var mı? –

3

Aşağıdaki kodu kullanarak CSS backgroundposition taklit başardı: Çünkü taşma

<View style={{ overflow: 'hidden' }}> 
    <Image src={{ uri: imageURI }} style={{ height: /*adjust_as_needed*/, resizeMode: 'cover' }} /> 
</View> 

: View 'gizli' Resmin yüksekliği, görüntünün ekstra yüksekliğini görmeden ayarlanabilir. Yeniden boyutlandırma modu için 'içerme' yerine 'kapsayıcı' uygulamanız gerekir, aksi takdirde görüntünün yüksekliğini çok büyük olarak ayarlarsanız Görünüm kabı kadar geniş olmayan bir ortalanmış resim ile sonuçlanırsınız . Aşağıdaki örnekte, Resim yüksekliği (mavi noktalı çizgi), alttaki örnekden daha büyüktür ve bu nedenle görüntünün merkez çizgisi, görünümde daha düşük oturur. İkinci örnekteki görüntünün yüksekliğini (mavi noktalı çizgi) azaltarak, görüntünün merkez çizgisi görünümde yukarı gider.

Bu durumun mantıklı olduğunu umuyorum ve umarım kullanım durumunuz için çalışır; madene yaptı: D

enter image description here

0

ben aynı şeyi yapmak gerekiyordu. Bunu başarmanın en iyi yolu, görüntünün yüksekliğini veya genişliğini açıkça belirtmek oldu. Ardından, görüntünüzü başka bir bileşene sararak, resmin konumunu tam olarak kontrol etmek için justifyContent'i kullanabilirsiniz.

Her zaman resmin genişliğine veya yüksekliğine sahip olamayacağınız doğrudur. Ancak, oldukça sık (özellikle de resizeMode kullanıyor: 'içerir') bir boyuta göre yüksekliği veya genişliği ayarlamak istersiniz. Yüksekliğin görünümün genişliğine eşit olmasını istedim.

<View style={{ flex: 1, justifyContent: 'flex-start' }}> 
    <Image 
     source={{ uri: imagePath }} 
     resizeMode="contain" 
     style={{ height: vw(100) }} 
    /> 
</View> 

vw this cevap gelen bir yardımcı fonksiyonudur: İşte kullanılan bir çözümdür.

0

Ayarlanan diğer değerlerin bazılarını düzeltmeniz gerekir. Çoğu durumda genişlik sabit olsun. Ebeveyn esnek seçeneği ile dikkatli olun. Tasarımınızı değiştirebilir.