В контроллере детального вида вы можете полностью настроить другое представление, используя что-то вроде этого (код из моего недавнего проекта):
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation
duration:(NSTimeInterval)duration
{
if ([graphView superview]) {
if (toOrientation == UIInterfaceOrientationPortrait ||
toOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[graphView removeFromSuperview];
}
} else {
if (toOrientation == UIInterfaceOrientationLandscapeLeft ||
toOrientation == UIInterfaceOrientationLandscapeRight) {
[[self view] endEditing:YES];
[[self view] addSubview:graphView];
}
}
}
А теперь, чтобы скрыть панель вкладок, когда вы находитесь в альбомной ориентации (немного взломать, но работает):
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
UIInterfaceOrientation toOrientation = self.interfaceOrientation;
if ( self.tabBarController.view.subviews.count >= 2 )
{
UIView *transView = [self.tabBarController.view.subviews objectAtIndex:0];
UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1];
if(toOrientation == UIInterfaceOrientationLandscapeLeft ||
toOrientation == UIInterfaceOrientationLandscapeRight) {
transView.frame = CGRectMake(0, 0, 480, 320 );
tabBar.hidden = TRUE;
}
else
{
transView.frame = CGRectMake(0, 0, 320, 480);
tabBar.hidden = FALSE;
}
}
}
Для этого проекта я добавил представление с именем «graphView», которое я хотел бы отображать тогда и только тогда, когда он находится в ландшафтном режиме, а затем я хотел скрыть панель вкладок. Я думаю, это похоже на то, что вы ищете.
Единственная потенциальная проблема, которую я предвижу, заключается в том, что если вы перейдете в ландшафтный режим до того, как будет отображен подробный вид, все может стать непонятным. Поэтому вы можете использовать эти методы в контроллере представления списка. Эта конкретная проблема никогда не возникала для меня, но я подумал об этом прежде, чем понял, что это спорный вопрос.