これは、1 つの XIB で 2 つのビューを使用して横向きと縦向きを実装しようとしている人への警告です (iOS 4 と Xcode 4)。私にとっては、1 つの XIB に 2 つのビューを持つことの主な欠点は、XIB 内の 1 つの UIOutlet オブジェクトをビュー コントローラー内の 1 つの UIOutlet オブジェクトにしか接続できないことです。
たとえば、横向きのビューと縦向きのビューを持つ XIB があり、両方のビューに同じインターフェイス オブジェクトが異なる位置に含まれているとします (横向きの UILabel と縦向きの UILabel など)。縦向きビューの UILabel と横向きビューのUILabel オブジェクトを、View Controller 内の単一の UILabel オブジェクトに同時にリンクすることはできません。
iOS UIViewController のドキュメント (iOS 4.3) では、画面の回転に合わせて 2 つのビューをプログラムで切り替えることにより、カスタムの横向きビューと縦向きビューを実装できることが示唆されているため、これは残念です。
これを行う方法を理解するためにかなりの時間を費やした後、1 つのビュー コントローラーに 2 つの異なるビューをアタッチすることは可能ですが、両方のビューのアウトレットが必要であることがわかりました。たとえば、私のビュー コントローラーには 2 つの UILabel オブジェクトがあります (1 つは縦向きビューの UILabel に接続するためのもので、もう 1 つは横向きビューの UILabel に接続するためのものです)。私のコードでは、ランドスケープ アウトレットを更新するたびに、ポートレート ランドスケープも更新します。
あまりエレガントではありませんが、機能します。これは 1 つの画面の単純なビュー用であるため、コントローラーとビューですべての UI オブジェクトを複製するためにメモリを大量に消費することはありません。私は再びそのようにしたプロジェクトを作成しませんが、それはそのプロジェクトにとって十分な回避策でした.