【发布时间】:2016-10-03 15:06:37
【问题描述】:
我正在使用嵌入在方形视图容器中的 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 添加到父视图控制器的 self.view 中。仅当我尝试将其添加到较小的视图时才发生此问题。当您尝试将其放置在小于其自身框架的视图中时,图像选择器内部基于约束的某些内容会中断。换句话说:它想要全屏。所以我将它添加到 self.view,然后将它移动到我想要的位置:(向上移动(屏幕高度 - 屏幕宽度)/ 2.0),然后我用覆盖视图覆盖它,将它发送到后面.
标签: objective-c uiimagepickercontroller ios10