旋转后隐藏的标签栏

时间:2012-08-30 08:45:15

标签: ios uitabbarcontroller screen-rotation

到目前为止,我还没有找到与我的情况相符的任何内容......

仅供参考,我正在使用故事板为iOS 5开发。

我有标签栏控制器,其中包含 2个视图(我们称之为标签1和标签2)。我还有一个单独的横向视图,没有标签栏,在应用程序使用期间设备每次旋转时都会使用该视图。我使用在shouldAutorotateToInterfaceOrientation中手动启动的segue来切换到此视图。我还在横向视图中使用NSString来了解我来自哪个标签,当我回到肖像时再回到正确的标签。到目前为止,这很好。我可以按照我想要的方式进入和离开风景模式。

我的问题是:

当我以纵向方式启动应用程序时,我会看到标签栏。如果我去景观,它就会消失。这很好,这就是我在故事板中所做的。但当我回到肖像时,标签栏不会回来!这就是问题所在。

编辑:调用轮换的代码

我停止使用shouldAutorotateToInterfaceOrientation进行轮播,因为它与自定义segues冲突。标签栏的问题在此之前,所以这不是问题。我改为使用didRotate

以下是来自FirstViewController.m的代码(SecondViewController.m中的相同代码,更改了我的segue标识符):

-(void)didRotate:(NSNotification *)notification
{ 
    UIInterfaceOrientation newOrientation =  [[UIDevice currentDevice] orientation];
    if ((newOrientation == UIInterfaceOrientationLandscapeLeft || newOrientation == UIInterfaceOrientationLandscapeRight)) 
    {
        [self performSegueWithIdentifier: @"Page1ToLandscapeSegue" sender: self];
    }
}

来自LandscapeViewController.mpreviousView是一个NSString,在去景观之前设置,所以我知道我来自哪个视图):

-(void)didRotate:(NSNotification *)notification
{ 
    UIInterfaceOrientation newOrientation =  [[UIDevice currentDevice] orientation];
    if (newOrientation == UIInterfaceOrientationPortrait)
    {
        if ([previousView isEqualToString: @"View1"]) {
            [self performSegueWithIdentifier: @"LandscapeToPage1Segue" 
                                      sender: self];
        }

        else if ([previousView isEqualToString: @"View2"]) {
            [self performSegueWithIdentifier: @"LandscapeToPage2Segue" 
                                      sender: self];
        }
    }
}

1 个答案:

答案 0 :(得分:3)

查看您的评论我认为您的标签栏正在消失,因为您正在从未嵌入标签栏控制器的视图控制器(这是您的横向视图视图控制器)中进行搜索,我建议以下:

1)设置segues以回到上一个视图似乎很复杂,更不用说你创建了更多的视图/控制器并将它们添加到堆栈中,因此丢弃了返回到原始视图的segue。

2)使横向视图的segues成为模态,这样当你使用它时就不会显示标签栏,如果使用push它将嵌入标签栏控制器。

3)由于横向视图是模态视图,只需在横向视图控制器的旋转代码中调用此方法:

[[self presentingViewController] dismissModalViewControllerAnimated:YES];

这会将视图从堆栈中推出并返回到它来自的视图。