xcode 4.2では、iPhoneとiPadの両方に新しいプロジェクトを設定し、新しいiOS「マスター-詳細アプリケーション」を作成することを選択した場合、Xcodeは多くのテンプレートコードを設定します。アプリケーションのiOS「バージョン」には、別のより単純なストーリーボードがあります。アプリケーションの詳細ビューをテーブルコントローラーによって制御されるテーブルビューにもしたいと思います。また、このテーブルビューのセルは、向きを変更すると自動的にサイズ変更されます。問題は、これはiPhoneバージョンのアプリケーションでは機能しますが、iPadバージョンでは機能しないことです。
前提条件:
iPhoneストーリーボードの詳細ビューを編集してテーブルビューコントローラーが含まれるようにし、テーブルビューを単一のプロトタイプセルを含むように定義する場合-プロトタイプセルをカスタムタイプに設定し、それにいくつかのサブビューを追加してから、それらのサブビューを定義します自動サイズ変更プロパティを使用します(たとえば、2つのボタン-1つはビューの左側に固定され、もう1つはビューの右マージンに固定されます)。iPadストーリーボードの詳細ビューについても同じことを行います(もちろん、これはより複雑なスプリットビューコントローラーの配置に含まれています)。
すべてのビューコントローラでNIBからのサイズ変更ビューが選択されており(デフォルトで選択されています)、すべてのビューで[サブビューの自動サイズ変更]が選択されていることを再確認してください。
期待される:
アプリケーションがiPhoneまたはiPad用にコンパイルされている場合、どちらの場合も、テーブルセルとそのサブビューは向きが変わるとサイズが変更されます。
実結果:
iPadバージョンのアプリでは、テーブルセルはUITableビューの変更されたサイズに一致するように再レイアウトされません。iPhoneバージョンのアプリのテーブルセルは期待どおりに動作します。
ネストされたビューのサブビューレイアウトのチェーンが壊れているため、方向の変更が発生したときに再レイアウトサブビューが発生しないか、テーブルビューセルまで呼び出されないことは明らかです。これがInterfaceBuilderで修正できるかどうか、またはチェーンを再確立するためにどのコードが必要かを知っている人はいますか?UITableViewControllerの独自のカスタムサブクラスでwillRotateToInterfaceOrientation:duration:を使用してこれを修正する方法は知っていますが、この方法でクリーンであるかどうかはわかりません。回避策を提供するコードのスクラップを使用して、方向の変更を部分的に自動化したくないと思います。自動化できるはずだと思います。