2015-10-27 16 views
22

Gdy obraz ma tryb zmiany rozmiaru "zawiera", wydaje się, że wyrównuje/uzasadnia rzeczywisty obraz w środku, treść obrazu jest jednak wyrównana/uzasadniona przy flex start.React Native - pionowe wyrównanie obrazu z resizeMode "zawierają"

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

Z poniższym tekstem pojawia się nad obrazem.

Czy istnieje sposób pionowego wyrównania zawartego obrazu do góry?

+2

Czy kiedykolwiek to rozgryzłeś? Twój wpis to jedyne odniesienie, które znalazłem w Internecie dla tego problemu. Dziękuję za udostępnienie dodatkowych informacji, które posiadasz. – bgolson

+0

Ten sam problem dla mnie. Ale będzie dobrze, jeśli zastąpię ** Obraz ** innym komponentem. Dlaczego ** Obraz ** jest tak wyjątkowy? –

+0

Myślę, że efekt, którego szuka Kyle, osiąga się w sieci z pozycją tła CSS (https://developer.mozilla.org/en-US/docs/Web/CSS/background-position). Szukam również rozwiązania tego problemu. Podczas korzystania z okładki lub zawartości nie zawsze chcę, aby obraz był wyśrodkowany w pionie i poziomie w widoku. – SomethingOn

Odpowiedz

2

Musisz użyć stylów na obrazku, aby ustawić pionowe wyrównanie, które chcesz.

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, 
    }, 
}); 

Zobacz https://rnplay.org/apps/9D5H1Q dla uruchomionego przykład

+1

Cześć, dziękuję za odpowiedź. Niestety nie rozwiązuje to całkowicie problemu, z którym się borykam. Dodałem przykład na https://rnplay.org/apps/9qKrYA. Należy zauważyć, że nawet przy uruchomieniu z funkcją flex-start rzeczywisty obraz nadal znajduje się na środku. http://prntscr.com/8wc3cf –

+0

Co dokładnie chcesz osiągnąć? Mógłbyś narysować to w farbie albo coś? Czy chcesz mieć obrazy na wierzchu wierszy (pionowo) z białą przestrzenią pod nimi? –

3

byłem w stanie symulować CSS backgroundPosition stosując następujący kod:

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

powodu przelewu: 'ukryty' na Zobacz Wysokość obrazu można regulować, nie widząc dodatkowej wysokości obrazu. Będziesz musiał użyć 'okładki' zamiast "zawierać" dla trybu zmiany rozmiaru, w przeciwnym razie skończysz z wyśrodkowanym obrazem, który nie jest tak szeroki jak kontener Widok, jeśli ustawisz zbyt dużą wysokość obrazu .

W górnym przykładzie poniżej wysokość obrazu (niebieska linia przerywana) jest większa niż dolny przykład i dlatego środkowa linia obrazu znajduje się niżej w widoku. Zmniejszając wysokość obrazu (niebieska linia przerywana) w drugim przykładzie, środkowa linia obrazu przesuwa się w górę w widoku.

Mam nadzieję, że to ma sens i mam nadzieję, że zadziała w twoim przypadku użycia; to nie dla kopalni: D

enter image description here

0

muszę zrobić to samo. Najlepszym sposobem na osiągnięcie tego było wyraźne podanie wysokości lub szerokości obrazu. Następnie, zawijając obraz w innym komponencie, możesz użyć opcji justifyContent, aby uzyskać pełną kontrolę nad pozycją obrazu.

To prawda, że ​​nie zawsze możesz mieć szerokość lub wysokość obrazu. Jednak dość często (szczególnie przy użyciu resizeMode: "zawierają") chcesz ustawić wysokość lub szerokość względem czegoś. Chciałem, aby wysokość była równa szerokości widoku. Oto rozwiązanie, które użyłem:

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

VW jest funkcją pomocnik, który pochodzi z this odpowiedź.

0

Musisz naprawić niektóre wartości, a druga niech bez zestawu. w większości przypadków niech szerokość jest stała. Bądź ostrożny z opcją rodzica flex. To może zmienić twój projekt.

Powiązane problemy