dlaczego tekst zajmuje całą przestrzeń widoku, a nie tylko miejsce na napis „Hello”?
Ponieważ View
jest to kontener elastyczny i domyślnie ma flexDirection: 'column'
i alignItems: '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 w display: 'inline'
ogóle nie istnieją. W ten sposób domyślne zachowanie a Text
wewnątrz a View
w React Native różni się od domyślnego zachowania span
wewnątrz a div
w sieci; w tym drugim przypadku rozpiętość nie wypełniłaby szerokości elementu, div
ponieważ a span
jest domyślnie elementem wbudowanym. W React Native nie ma takiej koncepcji).
Jak można przesunąć tekst / wyrównać go do prawej strony?
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:
<View>
<Text style={{textAlign: 'right'}}>Hello, World!</Text>
</View>
(To podejście nie zmienia faktu, że Text
wypełnia całą szerokość View
; po prostu wyrównuje tekst do prawej strony Text
.)
<View>
<Text style={{alignSelf: 'flex-end'}}>Hello, World!</Text>
</View>
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
.
<View style={{alignItems: 'flex-end'}}>
<Text>Hello, World!</Text>
</View>
Jest to równoważne z ustawieniem alignSelf: 'flex-end'
na wszystkich View
dzieciach.
<View style={{flexDirection: 'row', justifyContent: 'flex-end'}}>
<Text>Hello, World!</Text>
</View>
flexDirection: 'row'
ustawia główny kierunek układu jako poziomy zamiast pionowego; justifyContent
działa podobnie alignItems
, ale kontroluje wyrównanie w kierunku głównym zamiast w kierunku poprzecznym.
<View style={{flexDirection: 'row'}}>
<Text style={{marginLeft: 'auto'}}>Hello, World!</Text>
</View>
To podejście jest zademonstrowane w kontekście sieci i prawdziwego CSS na stronie https://stackoverflow.com/a/34063808/1709587 .
<View>
<Text style={{position: 'absolute', right: 0}}>Hello, World!</Text>
</View>
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ędzie View
domyślnie na górze (chociaż możesz wyraźnie ustawić odległość od górnej krawędziView
używając top
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.
justifyContent
,alignItems
,alignSelf
. Zastanawiam się, co jest poprawne.