UINavigationController または UITabBarController のように機能する UIViewController のカスタム サブクラスを作成しました。これを ToolbarNavController と呼びましょう。下部には、ユーザーが別のコンテンツ ビューに移動するためのコントロールを備えたツールバーがあります。
ToolbarNavController のビュー以外に 2 つのコンテンツ ビューがあります。どちらもペン先からロードされ、独自のコントローラーがあります。アプリは、そのうちの 1 つを表示することから始めます。ツールバーのボタンを使用すると、ユーザーはそれらを切り替えることができます。
これらのビューを ViewDidLoad の ToolbarNavController のビューのサブビューとして追加すると、ステータス バーとツールバーの間の領域をオーバーラップ/アンダーラップなしで埋めるように正しくサイズ変更されます。
しかし、ユーザーがツールバー ボタンを押したときに初めてサブビューとして追加して、2 番目のビューを遅延ロードしようとすると、iOS は親ビューのツールバーを考慮してビューのサイズを変更しません。これは私の Autolayout 制約を台無しにします。また、viewDidLoad でサブビューを追加しない場合、2 番目のビューに切り替える前にデバイスを横向きにすると、縦向きのフレームで読み込まれます。
結論:サブビューを viewDidLoad に挿入すると、iOS はサブビューのサイズを正しく調整し、自動回転を管理します。後で挿入するときは、フレームの向きを自分で検出する必要があります。(そして、何らかの理由でこれを行うと、オートローテーションが再び開始されます)。
何が起こっている?