我想支持只肖像视图。我怎样才能使一个反应本机应用程序不自动旋转? 我试图搜索文档和 Github 问题,但没有找到任何有用的东西。
反应本机应用程序几乎只是一个普通的 iOS 应用程序,所以你可以完全相同的方式,你做的所有其他应用程序。简单地取消选中(在 XCode 中)“景观左边”和“景观右边”作为允许的设备方向在一般应用程序属性:
对于 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
{"orientation": "portrait"}
目前,许多官方的反应原生指南,如 这个,建议使用 Expo 时,建立反应原生应用程序,除了现有的答案,我还将添加一个特定于 Expo 的解决方案,这是值得注意的,因为它适用于 iOS 和 Android,你只需要设置一次,不需要乱搞 XCode 配置,AndroidManifest.xml 等。
如果你正在使用 Expo 构建你的 React 本机应用程序,那么你可以使用 app.json文件中的 orientation字段——例如:
app.json
orientation
{ "expo": { "name": "My app", "slug": "my-app", "sdkVersion": "21.0.0", "privacy": "public", "orientation": "portrait" } }
它可以设置为 "portrait","landscape"或 "default",这意味着自动旋转没有方向锁定。
"portrait"
"landscape"
"default"
还可以在运行时重写该设置,例如:
Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.LANDSCAPE);
论点可以是:
ALL_BUT_UPSIDE_DOWN
PORTRAIT_UP
PORTRAIT_DOWN
LANDSCAPE_LEFT
LANDSCAPE_RIGHT
当您允许多个方向时,您可以通过监听 Dimensions对象上的 change事件来检测更改:
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')得到尺寸:
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
当你听事件时,你同时得到 window和 screen,这就是为什么你访问它的方式不同。
window
screen
更多信息见:
如果您正在使用 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
ALL
PORTRAIT
LANDSCAPE
使用这个为 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 中选中或取消选中旋转模式
可以使用 反应-本土-迎新-储物柜模块和 lockToPortrait()函数。 如果您还想拥有一些方向未锁定的屏幕,那么这会很有帮助——在这种情况下,您还可以使用 unlockAllOrientations()函数。
lockToPortrait()
unlockAllOrientations()
机器人: 画面方向 = “肖像”
<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"
然后在所有的活动设置:
如果您使用的是 反应-导航,那么您可以简单地通过
screenOptions=\{\{ orientation: 'portrait'}}