在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>
我不知道接下来该做什么。感谢
答案 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
将以下内容添加到config.xml
文件中:
<platform name="ios">
<hook type="after_prepare" src="iosAfterPrepare.js" />
</platform>
在顶级目录中创建一个名为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' });
};
您可能需要拨打npm install --save plist
来获取计算机上的plist模块(它会抱怨它无法找到plist)。
呼叫:
cordova platform rm ios
cordova platform add ios
此时您应该会看到.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上进行了测试