如何禁用反应本机旋转?

我想支持只肖像视图。我怎样才能使一个反应本机应用程序不自动旋转? 我试图搜索文档和 Github 问题,但没有找到任何有用的东西。

119951 次浏览

反应本机应用程序几乎只是一个普通的 iOS 应用程序,所以你可以完全相同的方式,你做的所有其他应用程序。简单地取消选中(在 XCode 中)“景观左边”和“景观右边”作为允许的设备方向在一般应用程序属性:

Device orientation

对于 iOS 系统,Jarek 的回答很棒。

对于 Android,需要编辑 AndroidManifest.xml 文件。在每个要锁定到纵向模式的活动中添加以下代码行:

android:screenOrientation="portrait"

所以,一个完整的例子可能看起来像这样:

      <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>

请参阅文档中可用的屏幕定位属性的完整列表,这里是: https://developer.android.com/guide/topics/manifest/activity-element.html

2017年更新: {"orientation": "portrait"}

目前,许多官方的反应原生指南,如 这个,建议使用 Expo 时,建立反应原生应用程序,除了现有的答案,我还将添加一个特定于 Expo 的解决方案,这是值得注意的,因为它适用于 iOS 和 Android,你只需要设置一次,不需要乱搞 XCode 配置,AndroidManifest.xml 等。

在构建时设置方向:

如果你正在使用 Expo 构建你的 React 本机应用程序,那么你可以使用 app.json文件中的 orientation字段——例如:

{
"expo": {
"name": "My app",
"slug": "my-app",
"sdkVersion": "21.0.0",
"privacy": "public",
"orientation": "portrait"
}
}

它可以设置为 "portrait""landscape""default",这意味着自动旋转没有方向锁定。

在运行时设置方向:

还可以在运行时重写该设置,例如:

Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.LANDSCAPE);

论点可以是:

  • 四种可能的方向
  • 在某些 Android 设备上,ALL_BUT_UPSIDE_DOWN除了反向外,可以是所有4种方向。
  • 在某些 Android 设备上,纵向纵向也可以是反向纵向纵向。
  • PORTRAIT_UPー只有正面肖像。
  • PORTRAIT_DOWNー只有倒立的肖像。
  • 任何景观方向。
  • LANDSCAPE_LEFTー只有左侧景观。
  • LANDSCAPE_RIGHTー只有正确的景观。

检测旋转:

当您允许多个方向时,您可以通过监听 Dimensions对象上的 change事件来检测更改:

Dimensions.addEventListener('change', (dimensions) => {
// you get:
//  dimensions.window.width
//  dimensions.window.height
//  dimensions.screen.width
//  dimensions.screen.height
});

或者你也可以像这样随时用 Dimensions.get('window')Dimensions.get('screen')得到尺寸:

const dim = Dimensions.get('window');
// you get:
//  dim.width
//  dim.height

或:

const dim = Dimensions.get('screen');
// you get:
//  dim.width
//  dim.height

当你听事件时,你同时得到 windowscreen,这就是为什么你访问它的方式不同。

文件:

更多信息见:

如果您正在使用 RN expo 项目,并且应用程序包含反应导航,那么设置以下代码的导航对我很有帮助。

const AppNavigator = createStackNavigator(
{
Page1: { screen: Page1}
},
{
portraitOnlyMode: true
});

如果你使用 Expo,你可以简单的使用下面的代码:

Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.PORTRAIT);

在渲染之前把它放在 App.js 上

所有选项:

ALL ALL_BUT_UPSIDE_DOWN PORTRAIT PORTRAIT_UP PORTRAIT_DOWN LANDSCAPE LANDSCAPE_LEFT LANDSCAPE_RIGHT

使用这个为 ios ipad 方向问题想要改变在 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>

Answer for disable rotation in React Native.

For Android :

转到 Androidmenifest.xml 文件并添加一行: 屏幕方向 = “肖像”

         <activity
android:name=".MainActivity"


android:screenOrientation="portrait"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">


<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


For IOS :

很简单,您必须从 XCODE 中选中或取消选中旋转模式

enter image description here

可以使用 反应-本土-迎新-储物柜模块和 lockToPortrait()函数。
如果您还想拥有一些方向未锁定的屏幕,那么这会很有帮助——在这种情况下,您还可以使用 unlockAllOrientations()函数。

对于 Android,需要编辑 AndroidManifest.xml 文件。在每个要锁定到纵向模式的活动中添加以下代码行:

机器人: 画面方向 = “肖像”

所以,一个完整的例子可能看起来像这样:

 <application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme">


<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>


<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

安卓系统: 在清单文件中放置:

xmlns:tools="http://schemas.android.com/tools"

然后在应用程序标签内放置:

tools:ignore="LockedOrientationActivity"

然后在所有的活动设置:

android:screenOrientation="portrait"

如果您使用的是 反应-导航,那么您可以简单地通过

screenOptions=\{\{ orientation: 'portrait'}}