Je voudrais soutenir seulement la vue de portrait. Comment faire une React application native pour ne pas autoroter? J'ai essayé de chercher de la documentation et des problèmes avec Github, mais je n'ai rien trouvé d'utile.
L'application React Native est plutôt une application iOS normale, vous pouvez donc le faire exactement de la même manière que pour toutes les autres applications. Décochez simplement (en XCode) les options "Paysage à gauche" et "Paysage à droite" autorisées dans Orientations du périphérique dans les propriétés générales de l'application:
{"orientation": "portrait"}
Actuellement, de nombreux guides officiels React) aiment celui-ci recommandent d’utiliser Expo lors de la construction React = Applications natives donc, en plus des réponses existantes, je vais également ajouter une solution spécifique à Expo qui mérite d’être soulignée car elle fonctionne à la fois pour iOS et Android et vous n’avez besoin que de le configurer une fois sans besoin de jouer avec la configuration XCode, AndroidManifest.xml etc.
Si vous construisez votre React applications natives avec Expo, vous pouvez utiliser le champ orientation
de votre fichier app.json
- par exemple:
{
"expo": {
"name": "My app",
"slug": "my-app",
"sdkVersion": "21.0.0",
"privacy": "public",
"orientation": "portrait"
}
}
Il peut être réglé sur "portrait"
, "landscape"
Ou "default"
, Ce qui signifie effectuer une rotation automatique sans verrouillage de l'orientation.
Vous pouvez également remplacer ce paramètre au moment de l'exécution en exécutant, par exemple:
Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.LANDSCAPE);
où l'argument peut être:
ALL
- Toutes les 4 orientations possiblesALL_BUT_UPSIDE_DOWN
- Tout sauf le portrait inversé, pourrait être les 4 orientations de certains Android appareils.PORTRAIT
- L’orientation Portrait peut également être un portrait inversé sur certains Android.PORTRAIT_UP
- Portrait à l'envers uniquement.PORTRAIT_DOWN
- Portrait à l'envers uniquement.LANDSCAPE
- N'importe quelle orientation de paysage.LANDSCAPE_LEFT
- Paysage gauche uniquement.LANDSCAPE_RIGHT
- Paysage à droite uniquement.Lorsque vous autorisez plus d'une orientation, vous pouvez détecter les modifications en écoutant les événements change
de l'objet Dimensions
:
Dimensions.addEventListener('change', (dimensions) => {
// you get:
// dimensions.window.width
// dimensions.window.height
// dimensions.screen.width
// dimensions.screen.height
});
ou vous pouvez également obtenir les dimensions à tout moment avec Dimensions.get('window')
et Dimensions.get('screen')
comme ceci:
const dim = Dimensions.get('window');
// you get:
// dim.width
// dim.height
ou:
const dim = Dimensions.get('screen');
// you get:
// dim.width
// dim.height
Lorsque vous écoutez l'événement, vous obtenez window
et screen
en même temps, c'est pourquoi vous y accédez différemment.
Pour plus d'informations, voir:
Pour iOS, la réponse de Jarek est excellente.
Pour Android, vous devez modifier le fichier AndroidManifest.xml. Ajoutez la ligne suivante à chaque activité que vous souhaitez verrouiller en mode portrait:
Android:screenOrientation="portrait"
Ainsi, un exemple complet pourrait ressembler à ceci:
<activity
Android:name=".MainActivity"
Android:label="@string/app_name"
Android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
Android:windowSoftInputMode="adjustResize"
Android:screenOrientation="portrait">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Consultez la liste complète des propriétés screenOrientation disponibles dans la documentation, ici: https://developer.Android.com/guide/topics/manifest/activity-element.html
Si vous utilisez Expo, vous pouvez le faire simplement avec ce code:
Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.PORTRAIT);
Mettez-le sur App.js avant le rendu
Toutes les options:
ALL
ALL_BUT_UPSIDE_DOWN
PORTRAIT
PORTRAIT_UP
PORTRAIT_DOWN
LANDSCAPE
LANDSCAPE_LEFT
LANDSCAPE_RIGHT
utilisez-le pour le problème d'orientation de l'iPad pour l'iOS souhaitez changer dans le fichier plist https://www.reddit.com/r/reactnative/comments/7vkrfp/disabling_screen_rotate_in_react_native_both/
IOS:
<key>UISupportedInterfaceOrientations</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationPortraitUpsideDown</string> </array>