我的Cordova 3.6应用程序在使用Xcode 5编译时一直使用StatusBar插件。我调用StatusBar.hide()来隐藏整个应用程序的状态栏,并在执行像Camera这样的插件后再次使用。
但升级到Xcode 6后(兼容iOS 8),状态栏在iOS8中无法正常隐藏。我通过设置" UIViewControllerBasedStatusBarAppearance"设法部分修复它。到"是"在Xcode Info.plist中让StatusBar插件获得控制权。
但是,像Camera这样的插件现在会在从相册中选择照片时自动显示状态栏。我必须在选择照片后再次调用StatusBar.hide以再次隐藏栏。
以前当我在Xcode 5中编译并在iOS8中运行时,它很好。这个问题只出现在我升级Xcode(可能还有iOS基础套件到8.1)之后。我还尝试更新了相机和状态栏插件。
如何永久禁用我的应用的状态栏,即使从相册中选择照片也会隐藏它?
谢谢。
答案 0 :(得分:0)
所以我设法隐藏了我的应用中的状态栏,而不再使用工具栏。我正在使用并建议你使用的是钩子。
这是我正在做的事情:
在项目文件夹中,我有以下目录:
在_hook_extras文件夹中我有一个ios子目录。在该文件夹中是我的Project-Info.plist。
在我的plist文件中我添加了这个:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
在我的hooks文件夹中,我有一个名为before_compile的子目录。其中有一个js文件,它使用以下代码在编译时将plist复制到项目中。
!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var exec = require('child_process').exec;
// no need to configure below
var rootdir = process.argv[2];
var filestocopy = [ {
"_hook_extras/ios/Project-Info.plist": "platforms/ios/Project/Project-Info.plist"
}
filestocopy.forEach(function (obj) {
Object.keys(obj).forEach(function (key) {
var val = obj[key];
var srcfile = path.join(rootdir, key);
var destfile = path.join(rootdir, val);
// check if the file is a directory
if (fs.statSync(srcfile).isDirectory()) {
// make the directory if necessary?
child = exec("mkdir -p " + destfile, function (error, stdout, stderr) {
if (error) {
console.log(error);
} else {
console.log('Directory ' + destfile + ' created.');
}
// copy the files to the destination directory
child = exec("cp -r " + srcfile + " " + destfile, function (error, stdout, stderr) {
if (error !== null) {
console.log("exec error: " + error);
} else {
console.log("copied " + srcfile + " to " + destfile);
}
});
});
} else {
console.log("copying " + srcfile + " to " + destfile);
var destdir = path.dirname(destfile);
if (fs.existsSync(srcfile) && fs.existsSync(destdir)) {
fs.createReadStream(srcfile).pipe(
fs.createWriteStream(destfile));
}
}
});
});
答案 1 :(得分:0)
我尝试了几种解决方案,最终为我工作的是。
我必须进入我的plist,改变
View controller-based status bar appearance = YES
然后通过覆盖每个方法中的prefersStatusBarHidden来控制视图控制器中的状态栏,
-(BOOL)prefersStatusBarHidden{
return YES;
}