Chciałbym obsługiwać tylko widok pionowy. Jak mogę sprawić, by aplikacja React Native nie obracała się automatycznie? Próbowałem przeszukać dokumentację i problemy z Githubem, ale nie znalazłem nic pomocnego.
ios
react-native
syg
źródło
źródło
sensorPortrait
poprawnie pracować. Nigdy nie będzie obsługiwać odwróconego portretu (tjreversePortrait
.). Jednak użyciefullSensor
działało, ale wiązało się z zastrzeżeniem, że pozwalało również na krajobraz. Skończyło się na tym, że dla mnie było w porządku, ale jeśli tylko chceszportrait
ireversePortrait
możesz przechwycić zmianę orientacji w swojej Aktywności za pomocąonConfigurationChanged
inewConfig.orientation
i po prostu zignorować lub nadpisać zmiany krajobrazu.Odpowiedzi:
Aplikacja React Native to w zasadzie zwykła aplikacja na iOS, więc możesz to zrobić dokładnie w taki sam sposób, jak w przypadku wszystkich innych aplikacji. Po prostu odznacz (w XCode) „Poziomo po lewej” i „Poziomo po prawej” jako dozwolone Orientacje urządzenia we właściwościach ogólnych aplikacji:
źródło
portrait
iupside down
, ale moja aplikacja nie obracała się automatycznie po obróceniu ekranu symulatora (dwukrotnie o 90 stopni), w czym problem?react-native 0.45.1
W przypadku iOS odpowiedź Jarka jest świetna.
W przypadku Androida musisz edytować plik AndroidManifest.xml. Dodaj następujący wiersz do każdego działania, które chcesz zablokować w trybie portretowym:
Tak więc pełny przykład może wyglądać następująco:
Zobacz pełną listę dostępnych właściwości screenOrientation w dokumentacji, tutaj: https://developer.android.com/guide/topics/manifest/activity-element.html
źródło
Aktualizacja 2017:
{"orientation": "portrait"}
Obecnie wiele oficjalnych przewodników po React Native, takich jak ten, zaleca używanie Expo podczas tworzenia aplikacji React Native, więc oprócz istniejących odpowiedzi dodam również rozwiązanie specyficzne dla Expo, które jest warte odnotowania, ponieważ działa zarówno na iOS, jak i Android i wystarczy ustaw go raz, bez konieczności majstrowania przy konfiguracji XCode, AndroidManifest.xml itp.
Ustawianie orientacji w czasie kompilacji:
Jeśli tworzysz swoje aplikacje React Native za pomocą Expo, możesz użyć
orientation
pola w swoimapp.json
pliku - na przykład:To może być ustawiony
"portrait"
,"landscape"
albo"default"
co oznacza AutoRotate bez blokady orientacji.Ustawianie orientacji w czasie wykonywania:
Możesz również zastąpić to ustawienie w czasie wykonywania, uruchamiając na przykład:
gdzie argumentem może być:
ALL
- Wszystkie 4 możliwe orientacjeALL_BUT_UPSIDE_DOWN
- Wszystkie oprócz odwróconego portretu mogą mieć wszystkie 4 orientacje na niektórych urządzeniach z Androidem.PORTRAIT
- Orientacja pionowa, może być również odwrócona w pionie na niektórych urządzeniach z Androidem.PORTRAIT_UP
- Tylko portret do góry nogami.PORTRAIT_DOWN
- Tylko portret do góry nogami.LANDSCAPE
- Dowolna orientacja pozioma.LANDSCAPE_LEFT
- Tylko lewy poziom.LANDSCAPE_RIGHT
- Tylko prawy krajobraz.Wykrywanie obrotu:
Jeśli zezwolisz na więcej niż jedną orientację, możesz wykryć zmiany, nasłuchując
change
zdarzeń naDimensions
obiekcie:lub możesz po prostu uzyskać wymiary w dowolnym momencie za pomocą
Dimensions.get('window')
i wDimensions.get('screen')
ten sposób:lub:
Kiedy słuchasz wydarzenia, dostajesz jedno
window
i drugiescreen
w tym samym czasie, dlatego masz do niego inny dostęp.Dokumentacja:
Więcej informacji:
źródło
Answer for disable rotation in React Native.
For Android :
Przejdź do pliku Androidmenifest.xml i dodaj jedną linię: android: screenOrientation = "portrait"
For IOS :
Po prostu musisz zaznaczyć lub odznaczyć tryb rotacji w swoim XCODE
źródło
Jeśli korzystasz z Expo, możesz to zrobić po prostu za pomocą tego kodu:
Umieść go w App.js przed renderowaniem
Wszystkie opcje:
ALL
ALL_BUT_UPSIDE_DOWN
PORTRAIT
PORTRAIT_UP
PORTRAIT_DOWN
LANDSCAPE
LANDSCAPE_LEFT
LANDSCAPE_RIGHT
źródło
W przypadku Androida musisz edytować plik AndroidManifest.xml. Dodaj następujący wiersz do każdego działania, które chcesz zablokować w trybie portretowym:
android: screenOrientation = "portret"
Tak więc pełny przykład może wyglądać następująco:
źródło
Android: w pliku manifestu umieść:
Następnie wewnątrz tagu aplikacji umieść:
A potem w całym zestawie czynności:
źródło
użyj tego w przypadku problemu z orientacją na ios ipad chcesz zmienić w pliku plist https://www.reddit.com/r/reactnative/comments/7vkrfp/disecting_screen_rotate_in_react_native_both/
IOS:
źródło
Możesz użyć modułu i funkcji React-Native-Orientation-Locker
lockToPortrait()
.Może to być pomocne, jeśli chciałbyś mieć również niektóre ekrany z odblokowaną orientacją - w tym przypadku możesz również skorzystać z
unlockAllOrientations()
funkcji.źródło
Jeśli korzystasz z projektu RN expo, a aplikacja zawiera funkcję reaktywnej nawigacji, pomogło mi skonfigurowanie nawigacji do następującego kodu.
źródło