旋转后隐藏的标签栏

Posted

技术标签:

【中文标题】旋转后隐藏的标签栏【英文标题】:tab bar hidden after rotation 【发布时间】:2012-08-30 08:45:15 【问题描述】:

到目前为止,我还没有找到任何与我的情况相对应的东西......

仅供参考,我正在使用情节提要为 ios 5 进行开发。

我有一个 标签栏控制器,其中包含 2 个视图(我们称它们为标签 1 和标签 2)。我还有一个单独的横向视图,没有标签栏,在应用程序使用期间设备旋转的任何时候都会使用它。我使用在shouldAutorotateToInterfaceOrientation 中手动启动的segue 来切换到该视图和从该视图切换。我还在横向视图中使用 NSString 来了解我来自哪个选项卡,以便在我返回纵向时返回更正一个选项卡。到目前为止,这工作正常。我可以按照我想要的方式来回切换横向模式。

我的问题是:

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

编辑:调用旋转的代码

我停止使用 shouldAutorotateToInterfaceOrientation 旋转,因为它与自定义 segue 冲突。标签栏的问题以前就在这里,所以这不是问题。我改用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];
        
    

【问题讨论】:

请将您的代码发布为shouldAutorotateToInterfaceOrientation,以便我们为您提供帮助。 用“旋转”代码更新了我的帖子。我不使用“shouldAutorotateToInterfaceOrientation”来实际启动segue(我曾经使用过,但我停止了;问题之前就在这里)。我使用“didRotate”(参见我的帖子编辑)。 所以你设置了 segues 去横向视图和 2 segues 返回前一个视图,类似于循环? 这些segues是Push segues还是Modal segues? 没错,总共 4 个 segues:一个从 view1 到 Landscape,一个从另一个方向,一个从 view2 到 Landscape,一个另一个方向。 segues 执行正确。 【参考方案1】:

看着您的 cmets,我认为您的标签栏正在消失,因为您正在从未嵌入标签栏控制器的视图控制器(这是您的横向视图视图控制器)中分离,我建议以下:

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

2) 将横向视图的转场设为模态,这样当您转场时标签栏不会显示,如果您使用推送,它将嵌入到标签栏控制器中。

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

[[self presentingViewController] dismissModalViewControllerAnimated:YES];

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

【讨论】:

太好了。我还不能奖励赏金,但是当这解决了我的问题时,你会尽快得到奖励。非常感谢您的帮助!

以上是关于旋转后隐藏的标签栏的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 5 和 6 上仅支持在一个选项卡中旋转

隐藏标签栏项目并对齐其他标签项目

隐藏导航栏和标签栏后 UICollectionView 框架发生变化

自定义标签栏应用 ipad 隐藏标签栏

在主对象选择之前隐藏底部标签栏

在标签栏应用程序中隐藏标签栏