2016-12-16 10 views
3

iPadを横向きと縦向きの両方のモードで使用できるアプリを作っています。そのスーパーでにトップ、リード、末尾、および下セット(スーパービューは次のとおりです。 私UIViewControllersの構成は以下の通りです:デバイスの向きが変更されていると、UIViewControllerがビューの制約を更新しない

私は次の制約がありUICollectionViewUIViewControllerを持っていますUIView、私のUIViewController)。

セルをタップすると、セルの詳細ビューコントローラであるUINavigationControllerに別のUIViewControllerをプッシュします。シンプル。

最初のビューコントローラのデバイス方向を変更すると、UICollectionViewの境界が正しく設定されます。ここで

は私 問題来る:私は UICollectionView内のセルを選択した場合

を、第二の詳細のViewControllerが表示されます。次に、この2番目のViewControllerでデバイスの向きを変更してから最初のviewControllerに戻り、私のUIViewControllerのビューは回転していません。私はなぜ、私は成功なしでこれを試みたのかわからない:現在の方向に応じて制約を更新する私のfirstViewControllerの、viewDidAppear()の私は成功しなかった:

self.view.layoutIfNeeded()の私は、

私の最初のviewControllerのフレームビューは、以前の向きと同じですが、変更されませんでした...しかし、私が再びデバイスを回転させると、UIViewControllerが検出されます方向が変わり、ビューの境界が適切に設定されます。

私の問題は次のとおりです。2番目のビューコントローラに入っていて、デバイスを回転させていて、前のビューコントローラに戻ったとき、前のコントローラが方向変更を検出していない私はちょうど2番目のビューコントローラを作成しました。

GIFデモ:私は風景モードに肖像画からの回転を行った後

enter image description here

デバッグビュー階層ツールとして変化しない図は以下を示しています。

enter image description here

UIViewはまだポートレートになっているため、UICollectionView制約を新しい方向で更新することはできません...

どのようなアイデアですか?私のViewControllerのメインUIViewのは、右のフレームを持っている、と制約ができることと同様

public override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 
    self.view.frame = UIScreen.main.bounds 
    self.view.layoutIfNeeded() 
} 

viewWillAppear方法で画面の境界と私の最初のViewControllerのビューのフレームをリセットすることによって解決さ

答えて

5

UIViewでlayoutIfNeeded()を呼び出すと自動的に更新されます。

関連する問題