【问题标题】:iOS10 UIImagePickerController embedded as ChildViewController, not showing its subviews correctlyiOS10 UIImagePickerController 嵌入为 ChildViewController,未正确显示其子视图
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多