iPadを横向きと縦向きの両方のモードで使用できるアプリを作っています。そのスーパーでにトップ、リード、末尾、および下セット(スーパービューは次のとおりです。 私UIViewControllersの構成は以下の通りです:デバイスの向きが変更されていると、UIViewControllerがビューの制約を更新しない
私は次の制約がありUICollectionView
とUIViewController
を持っていますUIView
、私のUIViewController
)。
セルをタップすると、セルの詳細ビューコントローラであるUINavigationController
に別のUIViewController
をプッシュします。シンプル。
最初のビューコントローラのデバイス方向を変更すると、UICollectionView
の境界が正しく設定されます。ここで
UICollectionView
内のセルを選択した場合
を、第二の詳細のViewControllerが表示されます。次に、この2番目のViewControllerでデバイスの向きを変更してから最初のviewControllerに戻り、私のUIViewController
のビューは回転していません。私はなぜ、私は成功なしでこれを試みたのかわからない:現在の方向に応じて制約を更新する私のfirstViewControllerの、viewDidAppear()
の私は成功しなかった:
self.view.layoutIfNeeded()
の私は、
私の最初のviewControllerのフレームビューは、以前の向きと同じですが、変更されませんでした...しかし、私が再びデバイスを回転させると、UIViewController
が検出されます方向が変わり、ビューの境界が適切に設定されます。
私の問題は次のとおりです。2番目のビューコントローラに入っていて、デバイスを回転させていて、前のビューコントローラに戻ったとき、前のコントローラが方向変更を検出していない私はちょうど2番目のビューコントローラを作成しました。
GIFデモ:私は風景モードに肖像画からの回転を行った後
、デバッグビュー階層ツールとして変化しないさ図は以下を示しています。
UIView
はまだポートレートになっているため、UICollectionView
制約を新しい方向で更新することはできません...
どのようなアイデアですか?私のViewControllerのメインUIViewのは、右のフレームを持っている、と制約ができることと同様
public override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
self.view.frame = UIScreen.main.bounds
self.view.layoutIfNeeded()
}
:viewWillAppear
方法で画面の境界と私の最初のViewControllerのビューのフレームをリセットすることによって解決さ