0

私は iPhone アプリに取り組んでおり、縦向きビューと横向きビュー用に別々のレイアウトを作成したいと考えています。ポートレート レイアウトでは、2 列に 3 行の正方形ボタンがあります (これは、インターフェイス ビルダーの xib で行われます)。ランドスケープでは、2 行の 3 列が必要です。これは可能ですか?これでうまくいくと思われる次のコードを追加しました。

- (void)willAnimateRotationToInterfaceOrientation:    
(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
    toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
    NSLog(@"Landscape Rotation Occurred");
    scriptureButton.frame = CGRectMake(20, 20, 130, 130);
    characterSketchButton.frame = CGRectMake(170, 20, 130, 130);
    mapButton.frame = CGRectMake(320, 20, 130, 130);
    storyingButton.frame = CGRectMake(20, 170, 130, 130);
    videoButton.frame = CGRectMake(170, 170, 130, 130);
    otherResourcesButton.frame = CGRectMake(320, 170, 130, 130);
}
else
{
    NSLog(@"Portrait Rotation Occurred");
    scriptureButton.frame = CGRectMake(20, 20, 130, 130);
    characterSketchButton.frame = CGRectMake(170, 20, 130, 130);
    mapButton.frame = CGRectMake(20, 170, 130, 130);
    storyingButton.frame = CGRectMake(170, 170, 130, 130);
    videoButton.frame = CGRectMake(20, 320, 130, 130);
    otherResourcesButton.frame = CGRectMake(170, 320, 130, 130);
}
}
4

1 に答える 1

0

これを手動で実装するには、一般に 2 つの方法があります。

  1. コードと同じように、ビューを自分で配置します。それについて本質的に悪いことは何もありませんが、ビューの(ビューコントローラーではなく)で行う必要があることに注意してくださいlayoutSubviews。ビューがサブビューをレイアウトする前に設定したフレームは、プロセスで自動レイアウトによってリセットされます。

  2. コントローラーを 2 つ用意し、たとえば、ポートレート コントローラーを自動的に表示し、トランジション時にランドスケープ コントローラーを非表示にします。

2 番目の方法では、オートレイアウトとインターフェイス ビルダーの優れた機能をすべて使用して通常どおりモデルを作成できるため、一般的にはこの方法が推奨されます。

何らかの理由で 2 つのコントローラー ソリューションが受け入れられない場合は、フレームを直接変更するのではなく、ビューのレイアウト制約を変更することによって、1 のバリアントを使用することもできます。

ただし、あなたの質問から、実際にはUICollectionView. セル サイズを設定すると、View Controller の境界が変更されたときに、必要に応じてセルの位置が変更されます。

于 2013-09-26T23:40:28.620 に答える