2012-12-30 12 views
9
私は iOS 5iOS6+Auto ResizingAuto Layoutの複雑さに巻き込まれることなく、ストーリーボードを使用して、私のiPadアプリに風景&縦長の向きをサポートしたい

としてiPad上で複数の向きをサポートしますとき、MainStoryboard-Portrait & MainStoryboard-Landscape最善の方法は、絵コンテ(なし自動レイアウトまたは自動サイズ変更)

は、2つの別々のストーリーボードを作成する:以前のソリューションのための開始点は、次のされたとして私が考えたもの、(アプリは両方のiOS 5 & 6をサポートしていますので、そう何AutoLayoutはここでは許可されません)現在のビューコントローラ(それをFirと名づけましょうstrollerController)がポートレートであり、ユーザーがデバイスを横向きに回転すると、instantiateが新しいFirstViewControllerからMainStoryboard-Landscapeストーリーボードに、逆も同様です。私はFirstViewController.mwillRotateToInterfaceOrientation方法でこのような何かをした:

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

が、以下のクラッシュはiOS6 +で発生:A view can only be associated with at most one view controller at a time!、そこにはクラッシュしなくなりますが、回転は正常に動作しないiOS5を上にもそれを試してみました:ウィンドウの境界が回転するが、ビュー自体はそのまま維持されます。

どのようにiOS6でこれを動作させるには?または、別のより良い方法がある場合は、そのための実用的なコードサンプルを私に提供してください。私はあなたに50ポイントの賞金を授与します。

答えて

1

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

+1

複雑なUIプロジェクトで作業を開始すると、自動レイアウトが非常に複雑になる – JAHelia

+0

XCode UIデザイナーは、そのような複雑さをほとんど隠しています。 – Andrew

+4

これは良い答えではありません、彼はpre iOS 6をサポートできると言いました.iOS 6だけをサポートすることで、ユーザーベースの大部分を効果的に削除します。 iOS 6の採用は良いですが、そうではありません。 – jmstone617

8

実際に自動レイアウトを使用しない場合は、1つの.storyboardでこれを実行するには、IBOutlet (weak, nonatomic) UIView* portraitViewIBOutlet (weak, nonatomic) UIView* landscapeViewを使用します。各ビューを.storyboardのFirstViewControllerのメインviewのサブビューとして作成します。

はその後willRotateToInterfaceOrientation:で、次の手順を実行します。

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

.storyboardであなたのビューに作業するとき、あなたは右のサイドバーにhiddenフラグのチェックを外す/チェックすることで、各サブビューは少し良く見ることができます。

この場合の別の利点は、向きに関係なく表示されるビューがある場合、別のストーリーボードファイルとシーンを維持する必要がないことです。

+2

それはまだ複雑なUIビューの設計上の頭痛+各シーンで同時に2つのビューをロードするより大きなメモリフットプリントがあると思います。 – JAHelia

+0

多くのビューコントローラを備えたポートレートビューとランドスケープビューのストーリーボードがある場合、メモリが8 GBを超えていてもxcodeはすべてのメモリを使用します – JAHelia