在细节视图控制器中,您可以完全使用类似这样的东西(来自我最近的项目的代码)设置一个不同的视图:
- (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”的视图,当且仅当在横向模式下我想显示它,然后我想隐藏标签栏。我认为这听起来与您所追求的相似。
我预见的唯一潜在问题是,如果您在推送详细视图之前进入横向模式,事情可能会变得不稳定。因此,您可能希望在列表视图控制器中使用这些方法。这个特殊的问题对我来说从来没有出现过,但这是我在意识到它没有实际意义之前就想到的。