iOS8 Xcode 6 Cordova状态栏无法正常隐藏

时间:2014-11-05 05:12:55

标签: ios xcode cordova ios8 statusbar

我的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)之后。我还尝试更新了相机和状态栏插件。

如何永久禁用我的应用的状态栏,即使从相册中选择照片也会隐藏它?

谢谢。

2 个答案:

答案 0 :(得分:0)

所以我设法隐藏了我的应用中的状态栏,而不再使用工具栏。我正在使用并建议你使用的是钩子。

这是我正在做的事情:

在项目文件夹中,我有以下目录:

  • _hook_extras
  • 合并
  • 平台
  • 插件
  • RES
  • WWW

在_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;
}