私の状況はこの質問に非常に似ています。iPhone が縦向き、iPad が横向きのユニバーサルなアプリがあり、appDelegate.window.rootViewController = newScreen; を使用してすべてのメイン画面を切り替えます。iPhoneアプリは完璧に動作します。iPad アプリでは、画面が横向きではなく縦向きになることがあります。サンプル遷移コードを次に示します。
AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
ViewController* v = nil;
if (IS_IPAD()) {
v = [[ViewController alloc] initWithNibName:@"ViewController-iPad" bundle:nil];
}else{
v = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
}
[appDelegate.window setRootViewController:(UIViewController*)v];
私もこの他の質問からこれを試しました:
AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
ViewController* v = nil;
if (IS_IPAD()) {
v = [[ViewController alloc] initWithNibName:@"ViewController-iPad" bundle:nil];
}else{
v = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
}
[UIView
transitionWithView:appDelegate.window
duration:0.5
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^(void) {
BOOL oldState = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[appDelegate.window setRootViewController:(UIViewController*)v];
[UIView setAnimationsEnabled:oldState];
}
completion:nil];
しかし、何もそれを修正していません。
また、[appDelegate.window makeKeyAndVisable] と [appDelegate.window makeKeyWindow] を使用して、これが「ショック」を与えて正しい向きになることを期待しています。