2016-10-03 92 views
1

我正在使用UIImagePickerController嵌入方形視圖容器。它在iOS 8和9上運行良好。在iOS 10上,UIImagePickerController的內部對象不會拉伸到攝像頭選取器控制器的全部寬度。請參閱第2個畫面: enter image description here作爲ChildViewController嵌入iOS10的UIImagePickerController,沒有正確顯示它的子視圖

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中。

同樣的問題發生,如果我不使用約束,我手動設置UIImagePickerController框架。

我們可以在視圖檢查器中清楚地看到UIImagePickerController的佈局正確(對於容器視圖的全部寬度和高度,但它的內部子視圖不是)。

另外:由於涉及的努力,直接使用AVFoundation不是一個選項。

+0

我找到了解決方法。我現在將UIImagePickerController添加到父視圖控制器的self.view中。只有當我嘗試將其添加到較小的視圖時,纔會出現此問題。當您嘗試將其放置在比自己的框架小的視圖中時,基於約束的內部圖像拾取器會中斷。換句話說:它想成爲全屏。所以我將它添加到self.view中,然後將它移動到我想要的位置:(向上移動(屏幕高度 - 屏幕寬度)/ 2.0),然後用覆蓋視圖覆蓋它,將它發回。 – Alex

回答

0

我無法將UIImagePickerController嵌入到具有比父視圖控制器更小的框架的子視圖中。所以我將UIImagePickerController嵌入到View控制器的self.view中。然後我將它寄回去,根據需要將疊加層放在頂部。由於我的應用程序使用方形視頻,因此我最終也將其框架向上移動了一定的數量。因此,如果我將其框架部分移動到可見屏幕座標之外,並不介意,只要我不嘗試將框架縮小到比想要的尺寸更小。如果我這樣做,那麼UIImagePickerController內部的取景器子視圖就會意外地佈局(切斷)。同樣,這個問題只發生在iOS10上。

相關問題