Cordova iOS横向定位

时间:2016-02-17 16:53:15

标签: ios cordova

在iPhone上运行时,我的Cordova应用程序永远不会旋转到横向模式。

我尝试了很多解决方案,因为将这些行放在config.xml文件中:

  <preference name="ios-orientation-iphone" value="portrait and landscape" />
  <preference name="ios-orientation-ipad" value="portrait and landscape" />
  <preference name="Orientation" value="default" />

我还将以下行放在<platform name="ios">块中:

<preference name="Orientation" value="all" />

然后我在index.js文件中执行了以下操作:

        window.shouldRotateToOrientation = function (degrees) {
            return true;
        };

最后,我尝试在res / native / ios文件夹中创建自定义plist文件,因为我注意到生成的plist文件不包含这些行:

            <key>UISupportedInterfaceOrientations</key>
            <string>UIInterfaceOrientationLandscapeLeft</string>
            <string>UIInterfaceOrientationLandscapeRight</string>
            <string>UIInterfaceOrientationPortrait</string>
            <string>UIInterfaceOrientationPortraitUpsideDown</string>

我不知道接下来该做什么。感谢

5 个答案:

答案 0 :(得分:2)

我终于做到了。诀窍就是将自定义.plist文件放在res / native // - Info.plist。

此链接为我提供了解决方案:Tools for Apache Cordova (VS2015): Adding custom entries to *info.plist for iOS

答案 1 :(得分:1)

是的,这是创建Xcode项目的cordova cli的缺点 - 它不会添加这些方向标记。

前段时间我将以下内容添加到我的config.xml中(我目前正在使用PhoneGap构建服务)。

<gap:config-file platform="ios" parent="UISupportedInterfaceOrientations" mode="replace">
    <array>
      <string>UIInterfaceOrientationPortrait</string>
      <string>UIInterfaceOrientationLandscapeLeft</string>
      <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
</gap:config-file>

此博客文章中有更多信息:http://phonegap.com/blog/2014/01/30/customizing-your-android-manifest-and-ios-property-list-on-phonegap-build/

更新:我有<config-file>元素的链接,但看起来该元素用于插件(在plugin.xml文件中),而不是正常构建 - 所以它不会工作。

所以...你最好的赌注是:

  • 要以编程方式添加方向内容,请创建一个查找.plist文件的脚本,如果该块不在,则添加以下块:

    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    
  • 要在通过cordova platform add ios添加平台后添加它,请打开.xcodeproj文件,转到项目节点/常规/部署信息,然后检查iPhone和iPad的所有方向。< / p>

答案 2 :(得分:0)

我看到你找到了解决方案。这是另一个使用构建钩子和npm.js来完成工作的人;如果您在Linux或OSX上进行开发,那么这应该是跨平台的。以下是有关构建挂钩的更多信息:http://cordova.apache.org/docs/en/latest/guide/appdev/hooks/index.html

  1. 将以下内容添加到config.xml文件中:

    <platform name="ios">
        <hook type="after_prepare" src="iosAfterPrepare.js" />
    </platform>
    
  2. 在顶级目录中创建一个名为iosAfterPrepare.js的文件,并在下面复制(用项目名称替换MyProject):

    // iosAfterPrepare.js
    // Node.js build script run after "cordova ios prepare" (part of cordova build).
    // This adds the various orientations to the plist file for your project.
    
    module.exports = function (context) {
      var fs    = require('fs'),     // nodejs.org/api/fs.html
          plist = require('plist'),  // www.npmjs.com/package/plist
          // Here you will replace "MyProject" with the name of yours,
          // so that the .plist file can be found
          FILEPATH = 'platforms/ios/MyProject/MyProject-Info.plist',
          xml = fs.readFileSync(FILEPATH, 'utf8'),
          obj = plist.parse(xml);
    
      obj.UISupportedInterfaceOrientations = [
          "UIInterfaceOrientationPortrait",
          "UIInterfaceOrientationPortraitUpsideDown",
          "UIInterfaceOrientationLandscapeLeft",
          "UIInterfaceOrientationLandscapeRight"
      ];
    
      xml = plist.build(obj);
      fs.writeFileSync(FILEPATH, xml, { encoding: 'utf8' });
    
    };
    
  3. 您可能需要拨打npm install --save plist来获取计算机上的plist模块(它会抱怨它无法找到plist)。

  4. 呼叫:

    cordova platform rm ios
    cordova platform add ios
    
  5. 此时您应该会看到.plist文件中的行。

答案 3 :(得分:0)

这在cordova v 7.0.1中对我有用

<preference name="Orientation" value="default" />

config.xml

中的

答案 4 :(得分:0)

对于iOS,您需要在index.html文件的“内容安全策略”中添加“ gap:// *”属性(需要两个斜杠)。 例如:

 <meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap://* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />

否则,仅当用户与OS交互时,电话才会更改方向(按前按钮,向下拖动显示通知中心,或向上拖动转到设备设置)。

ondeviceready事件不会在没有设置gap:// *值的情况下触发。

您还需要添加cordova-plugin-whitelist插件。

来自corvoda-plugin-whitelist的描述:

  
      
  • gap:仅在iOS上(使用UIWebView时)是必需的,而对于JS->本机通信则是必需的
  •   

在cordova 8.1.2上进行了测试