3

iOS6とXcode4.5を使用して、ストーリーボードでタブバーといくつかのナビゲーションビューコントローラーを備えたアプリケーションをすぐに開発しています

通常、アプリはすべてのインターフェイスの向きをサポートする必要がありますが、ポートレートモードのみをサポートする必要がある2つのビューがあります。

そこで、ViewControllerに次のコードを追加しました。

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}

iOS 6でストーリーボードとナビゲーションビューコントローラーなしで開発した他のアプリでは機能しますが、彼女は機能しません!:/

役に立たない他の投稿を見つけたので、誰かが助けてくれることを願っています...

ドイツからよろしくお願いします

ローレンツ

編集:

私も試しました-動作しません!:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;

} 
4

2 に答える 2

6

私の知る限り、この問題は、UITabBarControllerとUINavigationControllerが-(BOOL)shouldAutorotateと-(NSUInteger)supportedInterfaceOrientationsの独自のデフォルト値を返しているために発生します。

1つの解決策は、View Controllerでのこれらのメソッドの独自の実装から適切な値を返すために、カテゴリ(または単にサブクラス)を介してこれらのクラスの両方を拡張することです。これは私のために働いたものです(あなたはこれをあなたのアプリデリゲートにドロップすることができます):

@implementation UITabBarController(AutorotationFromSelectedView)

- (BOOL)shouldAutorotate {
    if (self.selectedViewController) {
        return [self.selectedViewController shouldAutorotate];
    } else {
        return YES;
    }
}

- (NSUInteger)supportedInterfaceOrientations {
    if (self.selectedViewController) {
        return [self.selectedViewController supportedInterfaceOrientations];
    } else {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
}

@end

@implementation UINavigationController(AutorotationFromVisibleView)

- (BOOL)shouldAutorotate {
    if (self.visibleViewController) {
        return [self.visibleViewController shouldAutorotate];
    } else {
        return YES;
    }
}

- (NSUInteger)supportedInterfaceOrientations {
    if (self.visibleViewController) {
        return [self.visibleViewController supportedInterfaceOrientations];
    } else {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
}
@end

デフォルトでは、すべてのViewControllerは引き続き自動回転します。ポートレートモードのみをサポートする必要がある2つのViewControllerで、次を実装します。

-(BOOL)shouldAutorotate {
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}
于 2013-02-22T11:28:39.923 に答える
0

ジョナサンによる素晴らしい答え。

私は彼のコードを少し変更して、単一のスニペットでナビゲーションコントローラーを処理しました。

- (BOOL)shouldAutorotate {
    if (self.selectedViewController) {
        if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) {
            return [[[(UINavigationController*)self.selectedViewController viewControllers] lastObject] shouldAutorotate];
        }
        return [self.selectedViewController shouldAutorotate];
    } else {
        return YES;
    }
}

- (NSUInteger)supportedInterfaceOrientations {
    if (self.selectedViewController) {
        if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) {
            return [[[(UINavigationController*)self.selectedViewController viewControllers] lastObject] supportedInterfaceOrientations];
        }
        return [self.selectedViewController supportedInterfaceOrientations];
    } else {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
} 
于 2014-04-13T07:38:48.510 に答える