4インチと3.5インチの両方の画面サイズで機能するストーリーボードレイアウトの構築については多くの質問と回答がありますが、次のシナリオに適したソリューションを見つけることができませんでした。
私はios6(およびios7)で自動レイアウトを使用しており、landscpaeまたはipadをサポートする必要はありません。以下のモックアップのように見える必要があるいくつかのサブビューを持つUIViewがあります。ストーリーボードに自動レイアウト制約を設定して、どちらの画面サイズにも合わせるのは簡単です。私の質問は--自動レイアウトに実行時の画面サイズに応じて正しい制約を選択させるにはどうすればよいですか?
2つの異なるストーリーボードを使用したくないことに注意してください。アプリケーション全体でこれを行うのは大変な作業であり、各ストーリーボードのすべてのデリゲート、アウトレット、アクションを接続する必要があります。画面を変更すると、2倍の作業が必要になります。
1つのストーリーボードでこれを機能させるために2つの方法を試しましたが、どちらにも満足していません。
画面サイズが3.5 "のときに適用されるセカンダリ定数値がInterfaceBuilderの制約のみにある場合、問題は解決します。それで、私は質問を続けます。単一のストーリーボードを適切に使用して、サブビューを正しくレイアウトするにはどうすればよいですか。 4 "および3.5"の画面サイズ?
ストーリーボードを1つだけ使用し、自動レイアウトを使用したくない場合は、ダイアグラムに表示した内容をはるかに簡単にするため、ビューをコードでレイアウトする必要があります。
ユーザーが4インチのデバイスで実行されているかどうかを検出し、それに応じてビューをレイアウトする必要があります。
#define IS_568_SCREEN (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
if (IS_568_SCREEN) {
// Lots of code to layout for 4" devices
} else {
// Lots of code to layout for 3.5" devices
}
ただし、これに自動レイアウトを使用する場合は、時間とコードを大幅に節約できることがわかります。上記のソリューションを使用してコード内のすべてのビューを手動でレイアウトする代わりに、デバイスに応じてyと高さの制約を更新するだけで済みます。
自動レイアウトが処理するものと手動で更新する必要があるものを示すこの図を考慮すると、これは自動レイアウトを利用することでどれだけ節約できるかをより正確に描くのに役立つはずです。
#define IS_568_SCREEN (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
if (IS_568_SCREEN) {
self.layoutConstraintY.constant = 50.0f;
self.layoutConstraintHeight.constant = 248.0f;
} else {
self.layoutConstraintY.constant = 30.0f;
self.layoutConstraintHeight.constant = 220.0f;
}
[self layoutIfNeeded];
この stackoverflow answer は私にとって同じ問題を解決しました。
重要なのは、制約(高さなど)に対してIBOutletを作成することです。次に、このようなことをします
- (void)updateViewConstraints {
[super updateViewConstraints];
self.myConstraintFromIB.constant =
[UIScreen mainScreen].bounds.size.height > 480.0f ? 200 : 100;
}
プログラムで制約を編集する必要があります。 この質問はそのために役立つかもしれません。
2つの別々のストーリーボードファイル、または1つのストーリーボードファイルに2つのviewControllerシーンを含めることもできます。
ビューを追加して、その中に正方形のビューを含めるのはどうですか?余分なビューは、誰にも見られないように透明にする必要があります。追加ビューの制約を設定して画面サイズに合わせて拡大し、正方形ビューの制約を追加ボックスの中央に設定します。追加のボックスを基準にした正方形のビューサイズの乗数を選択します