Jak poprawnie wyrównać wprowadzanie tekstu w React Native?

89

Wprowadzanie tekstu jest wyśrodkowane, jak naprawić to wejście tekstu, aby pobierało dane z lewego górnego rogu

Wprowadzanie tekstu jest wyśrodkowane, jak naprawić to wejście tekstu, aby pobierało dane z lewego górnego rogu

Oto mój CSS do wprowadzania tekstu

/* The Text input is center aligned, how to fix this text input so that it takes input from top left corner */

input: {
  flex: 1, padding: 4, marginRight: 1, marginTop: 5, fontSize: 18, borderWidth: 1, borderRadius: 4, borderColor: '#E6E5ED', backgroundColor: '#F8F8F9', justifyContent: 'flex-start', height: 150
}
Vikramaditya
źródło
2
umm ... wyrównać to z czym? Twoje pytanie nie określa, co próbujesz zrobić.
Colin Ramsay,
1
co powinienem dodać do mojego css, aby mój tekst zaczynał się od lewego górnego rogu?
Vikramaditya

Odpowiedzi:

202

Miałem ten sam problem, ale powyższe uwagi go nie rozwiązały. Istnieje właściwość stylu tylko dla systemu Android,textAlignVertical która rozwiązuje ten problem na wejściach wielowierszowych.

to znaczy textAlignVertical: 'top'

Gianfranco P.
źródło
1
czy system iOS jest rozwiązany domyślnie, czy ta poprawka działa tylko na Androida?
dev_ter,
2
@dev_ter to tylko Android. Myślę, że iOS jest domyślnie wyrównany do góry, chociaż minęło trochę czasu, odkąd korzystałem z RN, więc tak naprawdę nie potwierdziłem. Nie jestem pewien, czy / jak wyrównałbyś do środka, ale możesz zrobić notatkę lub edytować, jeśli dowiesz się, jak to zrobić!
5
Niesamowite, rozwiązano problem z wyrównaniem TextInput w systemie multiline={true}Android.
C.Lee
8
Jak można przyjąć odpowiedź, jeśli textAlignVertical jest tylko na Androida?
Max
1
Praca również w iOS
deepelement
21

TextInput ma domyślne dopełnienie, zastąp je przez ustawienie:

paddingTop: 0,
paddingBottom: 0

Wydanie Github

Tarik Chakur
źródło
To był mój problem. Ponadto textAlignVertical nie jest rekwizytem zgodnie z dokumentacją
shoopi
18

Znalazłem rozwiązanie, które w Androidzie textAlignVertical: 'top'działa styl TextInput . ale w iOS multiline={true}działa właściwość TextInput .

aseel
źródło
5

Miałem podobny przypadek użycia w mojej aplikacji na iOS, gdzie TextInputwysokość wynosiła 100, a symbol zastępczy był wyświetlany na środku. Użyłem multiline={true}i sprawiło, że tekst pojawił się z góry. Mam nadzieję, że to pomoże.

Mahendra Liya
źródło
czy istnieje sposób, aby pojawił się na dole?
Johhan Santana
5

Podaj, textAlignVertical : "top"że rozwiąże Twój problem.

<TextInput placeholder="Your text post" multiline={true} numberOfLines={10}, maxLength={1000} style={{ borderWidth: 1, backgroundColor: "#e3e3e3", textAlignVertical : "top" }} />
Sukshith S.
źródło
3

Aktualizacja 2015-07-03: wielowierszowe wprowadzanie tekstu zostało scalone:

https://github.com/facebook/react-native/pull/991

Te przykłady multilinii , że statek z reagują native w UI Explorer powinien działać zgodnie z dokumentacją.

Problem polega na tym, że wielowierszowe TextInput nie działa jeszcze poprawnie, a dokumenty wprowadzają w błąd. Zobacz ten problem na Github:

https://github.com/facebook/react-native/issues/279

„Nie przeportowaliśmy jeszcze tej funkcji do oprogramowania typu open source”.

W tym wydaniu jest kod, który zapewnia minimalną funkcjonalność wielowierszową, więc możesz być w stanie go z tym uruchomić.

Colin Ramsay
źródło
1

U mnie zadziałało (RN 0,61,5):

<TextInput style={{textAlignVertical:'top', paddingTop: 0, paddingBottom:0 }} />
Andrey Patseiko
źródło
0

Just Incase szukasz kodu:

<TextInput
placeholder={'comment goes here!'}
multiline
style={{textAlignVertical:'top', ...otherStyle}}
/>
ishab acharya
źródło
0
import { Dimensions} from 'react-native';
const screenWidth = Math.round(Dimensions.get('window').width);
const screenHeight = Math.round(Dimensions.get('window').height);

// ...
intext: {
    height:screenHeight - 10,
    textAlignVertical: 'top',
    fontSize:17,
    padding:12,
    fontFamily:'courier',
    margin:10,     
},
user9806259
źródło
0

Dowiedziałem się na inspektora elementów, że dla iOS istnieje paddingTop: 5for multiline TextInputs. To było nadal stosowane, mimo że ustawiłem paddingVertical: 15dla wszystkich moich danych wejściowych. Rezultatem był nie wyśrodkowany tekst w wielowierszowych wejściach w systemie iOS. Rozwiązaniem było dodanie dodatkowo, paddingTop: 15jeśli TextInputjest, multilinea platformą jest iOS. Teraz wizualnie nie ma różnicy między wejściami pojedynczej linii i wieloliniowymi na obu platformach, Android i iOS.

Daniel
źródło
-1

Aby wyśrodkować tekst w pionie na obu platformach, użyj:

Do użytku na Androida textAlignVertical: "center"

Do użytku na iOS justifyContent: "center"

Artur Eshenbrener
źródło
Nie działa na iOS.
Abdul Mateen