iOS10 UIImagePickerController嵌入为ChildViewController,未正确显示其子视图

时间:2016-10-03 15:06:38

标签: objective-c uiimagepickercontroller ios10

我正在使用嵌入方形视图容器中的UIImagePickerController。它在iOS 8和9上运行良好。在iOS 10上,UIImagePickerController的内部对象不会拉伸到摄像机选取器控制器的整个宽度。看2个截图: enter image description here

enter image description here

视图检查器中的选定视图是:CAMPreviewView(在UIImagePickerController内)。

以下是我用于将UIImagePickerController嵌入为子视图的代码:

- (void) presentCameraInWindow {
[self addChildViewController:self.videoRecorder];

[self.cameraHolder
    addControls:@[self.videoRecorder.view]
    align:VerticalAlignStretchToFullHeight
    withHeight:self.view.bounds.size.width
    verticalPadding: 0.0f
    horizontalPadding:0.0f];

[[self.videoRecorder view] setNeedsLayout];
[self.view layoutIfNeeded];
[self.videoRecorder didMoveToParentViewController:self];
}

注意:addControls是我构建的垂直布局引擎,我到处使用它。它以编程方式自动创建约束,因此我不必这样做。

我在viewDidLoad中调用此设置。

如果我不使用Constraints,我会发生同样的问题,并手动设置UIImagePickerController的框架。

我们可以在视图检查器中清楚地看到UIImagePickerController正确布局(到容器视图的整个宽度和高度,但它的内部子视图不是)。

另外:由于所涉及的努力,现在不能直接使用AVFoundation。

1 个答案:

答案 0 :(得分:0)

我无法将UIImagePickerController嵌入到子视图中,该子视图的帧比父视图控制器的帧小。所以我将UIImagePickerController嵌入到容纳它的View控制器的self.view中。然后我把它发回去,根据需要在它上面叠加。由于我的应用程序使用方形视频,因此我最终也将其框架向上移动了一定量。因此,如果我将其框架部分地移动到可见屏幕坐标之外,我不会介意,只要我不尝试将其框架压缩到小于它想要的尺寸。如果我这样做,那么UIImagePickerController内部的取景器子视图会开始意外地布局(切断)。同样,此问题仅在iOS10上发生。