2013-01-31 8 views
29

アプリケーションのサポート:iOS6 +強制縦方向は

私のアプリは、縦向きと横向きの両方で動作します。しかし、1つのコントローラはポートレートでのみ動作します。

問題は、私が風景の中にいると私は肖像画にそれを回転させるまでにも新しいのViewControllerは、風景の中にあるビューコントローラをプッシュするとき。それはそうであるべきであるように肖像画で立ち往生している。

常にポートレートで表示させることはできますか?その親が風景でそれを押している場合でも?

すべて次のコードは、

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]; 

を助けないと、このコードはまで動作し、私は風景How to force a UIViewController to Portrait orientation in iOS 6

答えて

30

私はのviewDidLoad

に以下の行を追加することでこれを解決
UIViewController *c = [[UIViewController alloc]init]; 
[self presentViewController:c animated:NO completion:nil]; 
[self dismissViewControllerAnimated:NO completion:nil]; 
+1

確認済み、動作します! – Chris

+1

+1:viewcontrollerが登場する前に向きを強制的に変更する必要がありました。これがトリックでした。オリエンテーションを強制する「公式」な方法を知ってほしかったですが、私がするまでは、このメソッドを使用します。 – brainjam

+2

ビューを複数回呼び出す予定がある場合は、これらの行をviewWillAppearに追加することをお勧めします。 – ChavirA

3

まずから押していないですしない限り、あなたは、カテゴリを作成する必要があります。

UINavigationController + Rotation_IOS6.h

#import <UIKit/UIKit.h> 

@interface UINavigationController (Rotation_IOS6) 

@end 

UINavigationController + Rotation_IOS6.m:ちょうど置き換え、あなたはUITabBarControllerを使用している場合は

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

#import "UINavigationController+Rotation_IOS6.h" 

@implementation UINavigationController (Rotation_IOS6) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

@end 

次に、あなたが唯一の風景になりたいあなたのクラスでこれらのメソッドを実装しますUITabBarControllerのためのUINavigationController。 このソリューションは、長い検索の後に私のためにうまくいった!私は今あなたと同じ状況にいました!

EDIT

だから、私はあなたのサンプルを見ました。あなたはいくつかの変更を加える必要があります。 1 - UINavigationControllerカテゴリの新しいクラスを作成します。クラス名をUINavigationController + Rotation_IOS6(.hと.m) 2にする - メソッドpreferredInterfaceOrientationForPresentationを実装する必要はありません。

#import "UINavigationController+Rotation_IOS6.h" 

@implementation UINavigationController (Rotation_IOS6) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

@end 

3 - クラスではあなただけの風景の中に回転したい、まさにこのように、実装でこれを含める:あなたのカテゴリには、次のようになります

// Rotation methods for iOS 6 
- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

4 - 私がアドバイスうまた、あなたが風景にするクラス内部のiOS 5のためのオートローテーションのための方法を含む:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight; 
} 
+0

私は同じ実装を行っていますが、動作していません。私はあなたがそれをチェックしてくださいサンプルを作成しましたか? https://github.com/tariq235/ForcePortrait – Tariq

+0

私はあなたのコードを見て、いくつかの変更を行う必要があります!私は私の答えを編集しました...それを確認し、結果を教えてください... – CainaSouza

+1

初めに私のソースコードに時間を費やしてくれてありがとう。フォースポートモードでは2番目のコントローラーが必要なので、MaskLandscapeのコードをMaskPortraitに変更しました。また、あなたの指示通りにgithubコードを更新しましたが、まだ動作していません。私の問題は、First ControllerがLandscapeモードで、ナビゲーションのためにボタンをクリックしてから、Second ControllerをLandscapeで表示しないようにすることです。強制的にポートレートを回転させる必要があります。 – Tariq

関連する問題