Na przykład mam element, który chcę, aby był dobrze unoszony
<View style={{width: 300}}>
<Text style={{backgroundColor: "#DDD"}}>Hello</Text>
</View>
Jak można Text
przesunąć / wyrównać w prawo? Ponadto, dlaczego zajmuje Text
całą przestrzeń View
, a nie tylko miejsce na „Hello”?
react-native
Jakiś facet
źródło
źródło
justifyContent
,alignItems
,alignSelf
. Zastanawiam się, co jest poprawne.Odpowiedzi:
Ponieważ
View
jest to kontener elastyczny i domyślnie maflexDirection: 'column'
ialignItems: 'stretch'
, co oznacza, że jego elementy podrzędne powinny zostać rozciągnięte, aby wypełnić jego szerokość.(Zauważ, zgodnie z dokumentacją , że wszystkie komponenty w React Native są
display: 'flex'
domyślne i one wdisplay: 'inline'
ogóle nie istnieją. W ten sposób domyślne zachowanie aText
wewnątrz aView
w React Native różni się od domyślnego zachowaniaspan
wewnątrz adiv
w sieci; w tym drugim przypadku rozpiętość nie wypełniłaby szerokości elementu,div
ponieważ aspan
jest domyślnie elementem wbudowanym. W React Native nie ma takiej koncepcji).Ta
float
właściwość nie istnieje w React Native, ale jest mnóstwo dostępnych opcji (z nieco innymi zachowaniami), które pozwolą ci wyrównać tekst do prawej. Oto te, które przychodzą mi do głowy:1. Użyj
textAlign: 'right'
naText
elemencie(To podejście nie zmienia faktu, że
Text
wypełnia całą szerokośćView
; po prostu wyrównuje tekst do prawej stronyText
.)2. Użyj
alignSelf: 'flex-end'
naText
Spowoduje to zmniejszenie
Text
elementu do rozmiaru wymaganego do przechowywania jego zawartości i umieszczenie go na końcu kierunku poprzecznego (domyślnie kierunku poziomego)View
.3. Użyj
alignItems: 'flex-end'
naView
Jest to równoważne z ustawieniem
alignSelf: 'flex-end'
na wszystkichView
dzieciach.4. Użyj
flexDirection: 'row'
ijustifyContent: 'flex-end'
naView
flexDirection: 'row'
ustawia główny kierunek układu jako poziomy zamiast pionowego;justifyContent
działa podobniealignItems
, ale kontroluje wyrównanie w kierunku głównym zamiast w kierunku poprzecznym.5. Użyj
flexDirection: 'row'
naView
imarginLeft: 'auto'
naText
To podejście jest zademonstrowane w kontekście sieci i prawdziwego CSS na stronie https://stackoverflow.com/a/34063808/1709587 .
6. Użyj
position: 'absolute'
iright: 0
naText
:Podobnie jak w prawdziwym CSS, powoduje to
Text
„wyjście z przepływu”, co oznacza, że jego rodzeństwo będzie mogło na niego nakładać, a jego pozycja w pionie będzieView
domyślnie na górze (chociaż możesz wyraźnie ustawić odległość od górnej krawędziView
używająctop
właściwości style).Oczywiście, które z tych różnych podejść chcesz zastosować - i czy wybór między nimi w ogóle ma znaczenie - będzie zależeć od twoich konkretnych okoliczności.
źródło
<Text><Text>FLOAT TEXT</Text>multi line text here which wraps around float text
:. Lub to samo, ale z obrazem takim jak to:<View><Text><Image />multi line text which wrap around float image</Text>
.Możesz bezpośrednio określić wyrównanie elementu, na przykład:
źródło
display
wartości to'flex'
i'none'
.Dla mnie ustawienie
alignItems
z rodzicem załatwiło sprawę, na przykład:źródło
Nie powinieneś używać pływaków w React Native. React Native wykorzystuje flexbox do obsługi tego wszystkiego.
W twoim przypadku prawdopodobnie będziesz chciał, aby kontener miał atrybut
A jeśli chodzi o tekst zajmujący całą przestrzeń, ponownie musisz spojrzeć na swój kontener.
Oto link do naprawdę świetnego przewodnika po Flexbox: Kompletny przewodnik po Flexbox
źródło
flexDirection
: Jeśli chcesz przesunąć poziomo (wiersz) lub pionowo (kolumna)justifyContent
: kierunek, w którym chcesz się poruszać.źródło
justifyContent
nie wybiera kierunku jako takiego ; oferuje szereg opcji dotyczących rozmieszczenia i rozmieszczenia elementów wzdłuż głównego kierunku zginania.Możesz unosić się: bezpośrednio reaguj natywnie używając flex:
więcej szczegółów: https://facebook.github.io/react-native/docs/flexbox.html#flex-direction
źródło