我遇到了横向模式问题,但我找不到出路。基本上,我有一个标签栏应用程序,在第一个选项卡中我有导航控制器。在此导航控制器中,第一个视图包含带有项目的表格,单击该项目后,将推送描述该项目的详细视图。
我需要为列表视图和详细视图实现横向模式,但是对于列表视图,我需要为横向模式使用不同的视图控制器(通常,类似于封面流程)。详细信息视图只是更改方向,在这种情况下无需使用备用视图控制器。
根据Apple的Alternate Views示例,我尝试通过为列表视图控制器实现模态视图控制器来实现此行为。当我在列表视图中时(当我将设备转换为横向模式时,正确显示覆盖流视图控制器),这样可以正常工作。当我显示详细视图时出现问题。当我更改设备方向时,盖板流量再次出现。我所期望的是,仅当列表视图在屏幕上时才会显示封面流程。看起来模态视图控制器总是可见的,无论当前在NC堆栈上的VC是什么。
在我看来,将模态VC呈现为特定VC的横向视图不适用于多个导航级别。
我还尝试将横向视图作为子视图添加到视图控制器视图中。使用此解决方案时,我对导航级别没有任何问题,但此处的问题是标签栏未以横向模式隐藏。我需要隐藏标签栏以获得封面流,这是通过呈现模态VC来实现的。
对于这个问题,我将不胜感激。
非常感谢!
答案 0 :(得分:0)
在详细视图控制器中,您可以使用类似的东西(我最近的项目中的代码)完全设置不同的视图:
- (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”的视图,当我想要在横向模式下显示时,我想要显示,然后我想要隐藏tabbar。我认为这听起来与你所追求的相似。
我预见到的唯一潜在问题是,如果在推送详细视图之前进入横向模式,事情可能会变得很糟糕。因此,您可能希望在列表视图控制器中使用这些方法。这个特殊的问题从来没有出现过,但是在我意识到它没有实际意义之前,这是我想到的。