2012-04-10 8 views
1

xibベースのランドスケープオンリーアプリケーションを開発中です。アプリはランドスケープで正しく起動します。しかし、私の主なViewControllerのビューは肖像画で表示されます。つまり、画像が切り取られて見え、画面全体を占めないように90度回転します。私のインターフェイスを使用してモーダルビューコントローラを表示してから、メインのViewControllerに戻すと、問題が解決します(ビューは横長で表示されます)。この問題は、Xcode 4.2では発生しませんでした。これはXcode 4.3にアップグレードした後に発生し、プロジェクトの設定をアップグレードしたときにXcodeによってコード変更が自動的に実装されました。UIWindowのルートビューコントローラがアプリの起動時にランドスケープに回転しない

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

このリンク[1]のアイデアに基づいて、起動時にビューが向きを変えるような呼び出しを受け取っていないことが問題であると思われました。おそらくMainWindow.xibのコンセプトが削除されているようですAppDelegate.mで次のXcode挿入コードで置き換え:私は私のViewControllerクラスが提示された一般的なルート・ビュー・コントローラを生成するために、この方法を改変

- (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; 
} 

、以下のコードのように:

- (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; 
} 

Voila!これは私の問題を解決しました。しかし、私にとっては、基本的なレベルでの変化のように感じます。私はこの段階では開発したくはありません。私が自分のルートビューコントローラにしようとしていたのはモーダルビューです。誰にもこの問題の別の解決策がありますか?

ありがとうございます!

答えて

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のルートビューコントローラの設定がInterface Builderで無視されることがあります。私の推論はどこかで間違っていると確信していますが、これは誰かをより完全でより包括的な答えの方向に導くのに役立つと思いました。

0

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

self.window.frame = [UIScreen mainScreen].bounds; 
関連する問題