非常に簡単なように思えますが、この必要最小限のセットアップを正しく行うことはできません! コードを介して制約を追加するのではなく、すべて IB を介して行います。
- メイン ビューとメイン ビューの子としてのコレクション ビューを含むストーリーボード内の 1 つのビュー コントローラー
- ビュー コントローラーが読み込まれると、そのメイン ビューのサイズがデバイスの画面サイズ (3.5 対 4、つまり 320 x 480 対 320 x 568) に変更されるように設定したいと考えています。また、コレクション ビューは、その親ビューによって定義された領域全体を占めるようにサイズ変更する必要があります。
私がしたこと:
- メインビューを持つ新しいView Controllerで新しいStoryboardを作成しました
- コレクション ビューをメイン ビューの子として作成しました。
- コレクション ビューのサイズを IB の親と同じサイズに設定します (編集時には 4 インチ フォーマット)。
- スーパービューに関して、コレクション ビューの先頭、上部、末尾、および下部の制約を 0 に設定します。これは、「間隔の制約が保持されるように、必要に応じてサイズを変更する」ことを意味すると思います。これは、それらがすべて 0 であるため、スーパービュー領域全体に合わせてサイズ変更することを意味します。
- ビュー コントローラーのコードでは、コレクション ビューでデータソース / デリゲートまで機能するようにします。つまり、コレクション ビューはセルをロードし、コンテンツ サイズの高さは常にデバイスの画面よりも大きいため、コレクション ビューが全画面表示になっていても、スクロールするコンテンツが常に存在します。
私が期待すること: アプリの起動時とビューの読み込み時に、View Controller のメイン ビューとその子であるコレクション ビューの両方が、デバイスの画面サイズに応じて 320x480 または 320x568 のいずれかになります。
実際に何が起こるか: アプリの起動時とビューの読み込み時に、View Controller のメイン ビューのサイズが 320x480 に変更されますが、コレクション ビューは 320x568 に固定されます。これは、IB で指定した設計時のサイズです。
制約の競合も発生します。
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0xed66060 V:[UICollectionView:0x13a79400]-(-548)-[_UILayoutGuide:0xed65c90]>",
"<NSLayoutConstraint:0xed66090 V:[UICollectionView:0x13a79400]-(0)-[_UILayoutGuide:0xed65da0]>",
"<_UILayoutSupportConstraint:0xed4d4e0 V:|-(0)-[_UILayoutGuide:0xed65c90] (Names: '|':UIView:0xed65c00 )>",
"<_UILayoutSupportConstraint:0xed65730 V:[_UILayoutGuide:0xed65da0(0)]>",
"<_UILayoutSupportConstraint:0xed651f0 _UILayoutGuide:0xed65da0.bottom == UIView:0xed65c00.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0xed72ee0 h=--& v=--& V:[UIView:0xed65c00(480)]>"
)