Моя ситуация очень похожа на this question. У меня есть приложение, универсальное, где iPhone находится в портретной ориентации, а iPad - в Пейзаже, и я переключаюсь между всеми моими главными экранами, используя appDelegate.window.rootViewController = newScreen; Приложение iPhone работает отлично. IPad-приложение когда-нибудь бросит экран в портретной ориентации вместо пейзажа. Вот некоторые примеры кода перехода:rootViewController настроен, но отображается как некорректная ориентация
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];
Я также попытался это с this other question:
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] в надежде, что это «шокирует» его в правильной ориентации.
Это своеобразный способ переключения контроллеров представлений, которые я никогда раньше не видел, но он может работать. Вы добавили соответствующий '- (BOOL) shouldAutorotateToInterfaceOrientation:' вашим контроллерам? Это должно быть место, где определяется ориентация интерфейса. – mvds
Я действительно. Похож: if (IS_IPAD()) { return UIInterfaceOrientationIsLandscape (interfaceOrientation); } return (interfaceOrientation == UIInterfaceOrientationPortrait); –
Хм. Вы можете попытаться переключиться на менее строгий способ переключения VC, например. используя фиксированный (пустой) контроллер представления и представляя ваши различные взгляды на них. Это может привести к более надежной ориентации интерфейса. – mvds