9

Auto Layoutストーリーボードを使用するiPADアプリでiOS6+、以前の複雑な作業Auto Resizingに関与することなく、横向きと縦向きをサポートしたいiOS 5(アプリはiOS 5と6の両方をサポートするため、AutoLayoutここでは許可されないため)、私は考えましたソリューションの開始点として、次のようになりました。

2つの別々のストーリーボードを作成します。MainStoryboard-PortraitMainStoryboard-Landscape、現在のビューコントローラー(FirstViewControllerという名前を付けます)が縦向きで、ユーザーがデバイスを横向きに回転させると、ストーリーボードからinstantiate新しいものになります。ユーザーが縦向きに戻ると、その逆になります。私は次のメソッドでこのようなことをしました:FirstViewControllerMainStoryboard-LandscapewillRotateToInterfaceOrientationFirstViewController.m

  UIStoryboard *storyboard  = [UIStoryboard storyboardWithName:@"MainStoryboard-Landscape" bundle:[NSBundle mainBundle]];
  FirstViewController *VC =  [storyboard instantiateViewControllerWithIdentifier:@"VC1"];
  self.view = VC.view;

ただし、iOS6 +では次のクラッシュが発生します。iOS5A view can only be associated with at most one view controller at a time!でも試してみると、クラッシュは発生しませんが、回転は正しく機能しません。ウィンドウの境界は回転しますが、ビュー自体はそのままです。

iOS 5と6の両方でこれを機能させる方法は?または、別のより良い方法がある場合は、そのための実用的なコードサンプルを提供してください。50ポイントの賞金を授与します。

4

2 に答える 2

8

本当に自動レイアウトを使用したくない場合でも、単一の .storyboard でこれを行うには、 と を使用しIBOutlet (weak, nonatomic) UIView* portraitViewますIBOutlet (weak, nonatomic) UIView* landscapeView。.storyboardのメインviewのサブビューとして各ビューを作成します。FirstViewController

次に、willRotateToInterfaceOrientation:で次の手順を実行します。

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
    {
        self.portraitView.hidden = NO;
        self.landscapeView.hidden = YES;
    }
    else
    {
        self.portraitView.hidden = YES;
        self.landscapeView.hidden = NO;
    }

.storyboard でビューを操作する場合hidden、右側のサイドバーでフラグをオン/オフすることで、各サブビューを少し見やすくすることができます。

次に、これのもう 1 つの利点は、方向に関係なく適切に見えるビューがある場合、別のストーリーボード ファイルとシーンを維持する必要がないことです。

于 2013-01-02T00:48:39.050 に答える
1

自動レイアウトは本当に行く方法です。ストーリーボードが2つあるとすぐに、メンテナンスと一貫性の問題が発生します。ポートレートとランドスケープのユーザーエクスペリエンスを同じにしたい場合。特に理由でそれらを異なるものにしたい場合は、2つのストーリーボードが適切です。

于 2012-12-30T11:54:55.660 に答える