web-dev-qa-db-ja.com

横向きのビューコントローラから押している間、縦向きに強制する

アプリのサポート:iOS6以降

私のアプリは縦向きでも横向きでも動作します。ただし、1つのコントローラーはポートレートでのみ機能します。

問題は、私が横向きでビューコントローラーをプッシュすると、新しいビューコントローラーも横向きになるまで横向きになることです。その後、本来の形でポートレートに固定されます。

常にポートレートで表示することは可能ですか?その親がそれを横向きに押していたとしても?

次のコードはすべて役に立たない

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];

そして、このコードは私がランドスケープからプッシュしない限り、そしてそれ以外の場合は機能します iOS 6でUIViewControllerをポートレイト方向に強制する方法

30
Tariq

ViewDidLoadに次の行を追加することでこれを解決しました

UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:c animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
31
Tariq

まず、カテゴリを作成する必要があります。

UINavigationController + Rotation_IOS6.h

#import <UIKit/UIKit.h>

@interface UINavigationController (Rotation_IOS6)

@end

UINavigationController + Rotation_IOS6.m:

#import "UINavigationController+Rotation_IOS6.h"

@implementation UINavigationController (Rotation_IOS6)

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

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

@end

次に、ランドスケープのみにしたいクラスにこれらのメソッドを実装します。

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

UITabBarControllerを使用している場合は、UITabBarControllerのUINavigationControllerを置き換えるだけです。この解決策は、長い検索の後でうまくいきました。私はあなたと同じ状況にありました!

[〜#〜]編集[〜#〜]

だから、私はあなたのサンプルを見ました。いくつか変更する必要があります。 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;
}
3
CainaSouza