1

xib ベースのランドスケープのみのアプリを開発しています。アプリは横向きで正しく起動します。ただし、メインの ViewController のビューは縦向きに表示されます。つまり、画像がトリミングされて画面全体を占有しないように 90 度回転されます。インターフェイスを使用してモーダル ビュー コントローラーを表示し、メインの ViewController に戻ると、問題は自動的に修正されます (ビューは横向きで表示されます)。この問題は、Xcode 4.2 では発生しませんでした。Xcode 4.3 にアップグレードした後に発生し、プロジェクト設定をアップグレードしたときに、行われたコード変更のみが Xcode によって自動的に実装されました。

他の投稿のアドバイスに基づいて、サポートされているインターフェイスの向きと初期インターフェイスの向きの Info.plist 設定を確認しました。各ビュー コントローラーの shouldAutorotateToInterfaceOrientation メソッドをオーバーライドして、横向きの場合にのみ YES を返すようにしました。また、ビューのサイズ/向きを変更したくないので、ビューの自動サイズ変更をオフにしました。

このリンク [1] のアイデアに基づいて、おそらく MainWindow.xib の概念が削除されたため、ビューが起動時に向きを変更する呼び出しを受信して​​いないことが問題ではないかと考えました。これは次のように置き換えられているようですAppDelegate.m に Xcode で挿入されたコード:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

以下のコードに示すように、このメソッドを変更して、ViewController クラスが表示される汎用ルート ビュー コントローラーを生成しました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    ViewController* myViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.viewController = [[UIViewController alloc] init];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    [self.viewController presentModalViewController:myViewController animated:NO];
    return YES;
}

出来上がり!これで私の問題は解決しました。しかし、私には根本的なレベルでの変更のように感じます。これは、開発のこの時点では行いたくありません。ルート ビュー コントローラーにするつもりだったものが、モーダル ビューになりました。この問題に対する別の解決策はありますか?

前もって感謝します!

4

2 に答える 2

4

私はこれと同じ問題を抱えていました.ViewControllerが常にPortraitであると想定していた、Landscapeであることが意図されたアプリ。メインの UIWindow にランドスケープのルート ビュー コントローラーを与えるなど、プロジェクトと info.plist のあらゆる側面に多くの変更を加えました。それでもうまくいきませんでした。最終的にすべての変更を元に戻し、以下に示す 2 行をアプリ デリゲートに追加しました。

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{
    [_window addSubview:[_viewController view]];
    glView = _viewController.glView;

    // THIS FIXED ORIENTATION FOR ME IN IOS 6
    _window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    // END

    ...my other setup code here...
}

他には何も必要ありませんでした。

何らかの理由で、iOS 6 では UIWindow root-view-controller 設定が Interface Builder で無視されることがあるようです。私の推論はどこかで間違っていると確信していますが、これは誰かをより完全で網羅的な答えに導くのに役立つかもしれないと思いました.

于 2012-10-09T21:01:55.443 に答える
0

iOS 8 では、自動的に更新されないため、ウィンドウ フレームを UIScreen に設定することも必要です。

self.window.frame = [UIScreen mainScreen].bounds;
于 2015-01-12T10:08:37.687 に答える