正方形のビューコンテナに埋め込まれたUIImagePickerControllerを使用しています。 iOS 8と9ではうまくいきました.iOS 10では、UIImagePickerControllerの内部オブジェクトはカメラピッカーコントローラの全幅に伸びません。 2枚のスクリーンショットを参照してください iOS10 UIImagePickerControllerがChildViewControllerとして埋め込まれ、サブビューが正しく表示されない
ビューインスペクタの選択されたビューである:(UIImagePickerController内側)CAMPreviewView。
- (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];
}
注:ここでは
は、私がサブビューとしてUIImagePickerControllerを埋め込むために使用するコードですaddControls私はどこでも使用私が構築された垂直レイアウトエンジンです。それは自動的にプログラムで制約を作成するので、私はする必要はありません。
私はこれをviewDidLoadで設定します。
私がConstraintsを使用しない場合、同じ問題が発生し、UIImagePickerControllerのフレームを手動で設定します。
ビューインスペクタでは、UIImagePickerControllerが正しく配置されていることを明確に確認できます(コンテナビューの幅と高さ、内部のサブビューは正しくありません)。
また、AVFoundationを直接使用することは、現在の選択肢ではありません。
回避策が見つかりました。私は今親ビューコントローラのself.viewにUIImagePickerControllerを追加します。この問題は、小さなビューに追加しようとしたときにのみ発生していました。自分のフレームよりも小さいビューに拘束しようとすると、拘束ベースの内部画像ピッカーの何かが壊れます。つまり、フルスクリーンになりたい。だから私はそれをself.viewに加え、それを私が望む位置に移動しました:(画面の高さ - 画面の幅)/ 2.0で上にシフトさせてから、それをオーバーレイビューで覆います。 。 – Alex