iOS 10 UIImagePickerController黑屏

时间:2016-09-28 08:02:33

标签: ios objective-c xcode ios10 xcode8

我面临一个奇怪的问题...... 在运行iOS 10相机预览的设备上显示黑屏 但在旧版本中,它可以正常使用 我正在使用UIImagePickerController

self.sourceType = UIImagePickerControllerSourceTypeCamera;

我的info.plist文件:

enter image description here

enter image description here

示例项目:https://github.com/arturdev/cameraTest

7 个答案:

答案 0 :(得分:3)

我用不同的方法解决了这个问题。

不要创建UIImagePickerController的子类,因为Apple不支持UIImagePickerController的子类。

重要

  

UIImagePickerController类仅支持纵向模式。这个   class旨在按原样使用,不支持子类化。   此类的视图层次结构是私有的,不得修改,   除了一个例外。您可以为自定义视图分配   cameraOverlayView属性并使用该视图来显示其他内容   信息或管理相机界面之间的交互   和你的代码。

这是另一种解决方案:

在UIViewController中添加此代码

self.imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
self.imagePickerController.showsCameraControls = NO;
self.imagePickerController.delegate = self;

[self.view addSubview:self.imagePickerController.view];
[self addChildViewController:self.imagePickerController];
[self.imagePickerController didMoveToParentViewController:self];

在所有iOS版本和设备中正常工作。 :):)

答案 1 :(得分:2)

使用UIImagePickerController()代替任何其他初始化程序。

我遇到同样的问题,这是由于调用错误的初始化程序引起的。

答案 2 :(得分:0)

如果您使用Xcode 8,则需要将相机的隐私设置添加到info.plist以访问相机

答案 3 :(得分:0)

可能的原因可能是以下列出的原因之一,请尝试并检查它是否有帮助:

------ 尝试与主线程中显示UIImagePickerController相关的代码:

dispatch_async(dispatch_get_current_queue(), ^(void){

    //Code related to show UIImagePickerController

    .....

    self.imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    self.imagePickerController.showsCameraControls = NO;
    self.imagePickerController.delegate = self;

    [self.view addSubview:self.imagePickerController.view];
    [self addChildViewController:self.imagePickerController];
    [self.imagePickerController didMoveToParentViewController:self];

    .....

});

-----查看info.plist>捆绑显示名称:

如果 info.plist>捆绑显示名称为空,则添加捆绑显示名称键,其值为您的应用名称

------将相机的隐私设置设置为info.plist以访问相机:

相机:

键:Privacy - Camera Usage Description
价值:$(PRODUCT_NAME) camera use

------不要继承UIImagePickerController (作为 Ankit Gupta的 回答建议)

  

UIImagePickerController类仅支持纵向模式。这个   class旨在按原样使用,不支持子类化。

将自定义视图分配给cameraOverlayView属性,并使用该视图显示其他信息或管理相机界面与代码之间的交互。

参考:https://developer.apple.com/reference/uikit/uiimagepickercontroller

答案 4 :(得分:0)

也许你忘了呈现UIImagePickerController,这就是你得到空白屏幕的原因: -

<div class="group">
  <label class="person-involved-name">Name</label>
  <div class="textContainer"><input type="text" value="" name="nameSelect_1" id="nameSelect_1" [(ngModel)]="data.nameSelect_1" class="txt-box"></div>
</div>
<div class="group">
  <label class="person-involved-aliasname">Alias Name</label>
  <div class="textContainer"><input type="text" value="" name="aliasNameSelect_1" id="aliasNameSelect_1" [(ngModel)]="data.aliasNameSelect_1" class="txt-box"></div>
  <div><br class="clr"></div>
</div>

答案 5 :(得分:0)

你正在使用UIActionSheet来展示UIImagePickerController吗?我通过UIAlertController替换UIActionSheet来解决它。因为UIAlertView可能会导致无意义的错误。不再使用UIAlertView;)

答案 6 :(得分:-1)

我遇到了同样的问题。与iOS10有点奇怪。所以我在这里提出了解决方案。即使您使用 UIImagePickerController 或使用viewController扩展它。只需创建一个UIImagePickerController的实例并将其呈现在viewDidLoad中。

UIImagePickerController * imagePickerController = [UIImagePickerController alloc];

[self presentViewController:imagePickerController animated:YES completion:nil];