旋转后隐藏的标签栏
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.m
(previousView
是一个 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];
这会将视图推离堆栈并返回到它来自的视图。
【讨论】:
太好了。我还不能奖励赏金,但是当这解决了我的问题时,你会尽快得到奖励。非常感谢您的帮助!以上是关于旋转后隐藏的标签栏的主要内容,如果未能解决你的问题,请参考以下文章