调用phonegap相机功能后出现空白

Posted

技术标签:

【中文标题】调用phonegap相机功能后出现空白【英文标题】:white space appear after call phonegap camera function 【发布时间】:2014-03-10 01:25:20 【问题描述】:

在我的应用程序中,每当我调用相机(拍照或扫描条形码)时,底部都会添加一个空白(在 ios 7 上测试)。它可以随着我使用相机的次数而增长。看起来和状态栏的高度一样。

相机只是使用原生SDK,代码中没有其他内容。

CameraHelper.prototype.takeCameraImage = function(callback)
console.log("takeCameraImage");

navigator.camera.getPicture(onSuccess, onFail,     quality: 49, 
                                                    destinationType: Camera.DestinationType.FILE_URI,
                                                    sourceType: navigator.camera.PictureSourceType.CAMERA,
                                                    correctOrientation: true,
                                                    targetWidth: 266,
                                                    targetHeight: 266
                                                );

function onSuccess(imageURI) 
    callback(imageURI: imageURI);

function onFail(message) 
    callback(message: message);


;

可能的原因是什么?

【问题讨论】:

【参考方案1】:

试试这个,把这段代码放在你的 MainViewController.m 类中

- (void)viewDidLayoutSubviews

    if ([self respondsToSelector:@selector(topLayoutGuide)]) // iOS 7 or above
    
        CGFloat top = self.topLayoutGuide.length;
        if(self.webView.frame.origin.y == 0)
            // We only want to do this once, or if the view has somehow been "restored" by other code.
            self.webView.frame = CGRectMake(self.webView.frame.origin.x, self.webView.frame.origin.y + top, self.webView.frame.size.width, self.webView.frame.size.height - top);
        
    

【讨论】:

您好,看来这段代码不仅修复了gap问题,还修复了ios7中状态栏下的视图问题... 那么,你的问题解决了吗? 之前,我使用这段代码在状态栏下创建视图: // iOS7 解决状态栏下的视图 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) CGRect viewBounds = [self.webView 边界]; viewBounds.origin.y = 20; viewBounds.size.height = viewBounds.size.height - 20; self.webView.frame = viewBounds; 我认为这导致了这个问题......我删除了这段代码,只使用你发布的代码,差距问题消失了,状态栏也得到了修复 你能解释一下这段代码的具体作用吗?我有兴趣【参考方案2】:

对于高度,请尝试使用 self.view.frame.size.height - 20(或状态栏高度)。

【讨论】:

问题是,调用这个摄像头的时候没有控制帧高,请问这个高度应该加到哪里?【参考方案3】:

我在 OS 7.1 的 iPhone 上运行的 cordorva 应用程序上遇到了完全相同的问题。它也发生在对 inAppBrowser 的调用中。这里建议的解决方案都不适合我。

但是,真正起作用的是在 MainViewController.m 中找到它(我从第 78 行开始):

- (void)viewWillAppear:(BOOL)animated

    // View defaults to full size.  If you want to customize the view's size, or its subviews (e.g. webView),
    // you can do so here.
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
        CGRect viewBounds = [self.webView bounds];
        viewBounds.origin.y = 20;
        viewBounds.size.height = viewBounds.size.height - 20;
        self.webView.frame = viewBounds;
    
    [super viewWillAppear:animated];

注释掉下面一行:

viewBounds.size.height = viewBounds.size.height - 20;

这完全解决了我的复合空白问题,我没有发现任何负面后果。

【讨论】:

【参考方案4】:

使用此代码

 static int score = 0;
- (void)viewWillAppear:(BOOL)animated

// View defaults to full size.  If you want to customize the view's size, or its subviews (e.g. webView),
// you can do so here.

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
    CGRect viewBounds = [self.webView bounds];
    viewBounds.origin.y = 10;
    //viewBounds.size.height = viewBounds.size.height - 18;
    if (score==0) 
        viewBounds.size.height = viewBounds.size.height - 18;
        score=1;
    
    self.webView.frame = viewBounds;




[super viewWillAppear:animated];

【讨论】:

以上是关于调用phonegap相机功能后出现空白的主要内容,如果未能解决你的问题,请参考以下文章

相机不适用于phonegap中的应用

PhoneGap 相机/照片到服务器上传,失败,出现随机对话框

inapppbrowser或相机关闭后Phonegap状态栏重叠

如何在 xcode 5.1.1 中使用 phonegap-1.3.0.js 进行相机功能

使用 PhoneGap 从 img 标签本地保存图像

将相机或画廊中的图像保存在 phonegap 的画布中,并在旋转和裁剪后保存