2013-02-21 11 views
13

私のアプリは自動回転することができますが、私はポートレートモードでのみ表示するためにビューの1つを必要とし、これを実現する方法を知らない。1つのView Controllerの自動回転を防止しますか?

私は(他のものの間で)これを試みたが、問題のビューはまだ回転:

// ViewController.m 

-(BOOL)shouldAutorotate 
{    
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

誰かが親切に私が間違ってやっていると指摘することはできますか?ありがとう。

-edit-

それはiOSの6.1 UINavigationControllerが関与している

+0

どのSDKバージョンを開発していますか? –

+0

http://stackoverflow.com/questions/12630359/ios-6-how-do-i-restrict-some-views-to-portrait-and-allow-others-to-rotate – msk

+0

iOS 6、申し訳ありません。私はOPを更新しました。 – Robert

答えて

30

のためだ、UINavigationControlleroverride supportedInterfaceOrientationsにカテゴリを作成します。今

#import "UINavigationController+Orientation.h" 

@implementation UINavigationController (Orientation) 

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

-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 

@end 

、(例えばUINavigationControllerなど)のiOSコンテナは、彼らが自動回転するかどうかを判断するために子供たちに相談しないでください。新しいファイル(ココアタッチの下でのObjective C-カテゴリ)を追加し、カテゴリ
を作成する方法1.


2. Category:UINavigationController
3.上のオリエンテーションはUINavigationController+Orientation.m

+0

はい、そこには 'UINavigationController'が関わっていますが、私は告白する必要がありますあなたがサブクラス化することによって何を意味するのかを正確に知ることはできませんが、読んでいくつもりです。 – Robert

+0

@Robert 'UINavigationController'にカテゴリを追加するだけです。私の編集を参照してください –

+0

これは親のUITabBarControllerにも当てはまります – Halpo

2
に上記のコードを追加します。

スウィフト3バージョン受け入れられる回答:

extension UINavigationController { 

    open override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     // Change `.portrait` to whatever your default is throughout your app 
     return topViewController?.supportedInterfaceOrientations ?? .portrait 
    } 

    open override var shouldAutorotate: Bool { 
     return true 
    } 
} 
関連する問題