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

iOS10 UIImagePickerController embedded as ChildViewController, not showing its subviews correctly

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

在视图检查器中选择的视图是: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中调用这个设置。

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

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

另外:直接使用 AVFoundation 目前不是一个选项,因为涉及的工作量。

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