我正在使用UIImagePickerController嵌入方形視圖容器。它在iOS 8和9上運行良好。在iOS 10上,UIImagePickerController的內部對象不會拉伸到攝像頭選取器控制器的全部寬度。請參閱第2個畫面: 作爲ChildViewController嵌入iOS10的UIImagePickerController,沒有正確顯示它的子視圖
在視圖中檢查所選擇的看法是: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),然後用覆蓋視圖覆蓋它,將它發回。 – Alex