模态视图控制器隐藏标签栏

Posted

技术标签:

【中文标题】模态视图控制器隐藏标签栏【英文标题】:Modal view controller hides tab bar 【发布时间】:2013-01-24 04:08:30 【问题描述】:

在我的基于选项卡的应用程序中,单击其中一个选项卡时,我想显示一个带有一些信息的模式视图控制器。 在我的应用程序委托的 didSelectViewController 方法中,我添加了模态视图。但它占据了整个屏幕并隐藏了标签栏。我不想隐藏标签栏,只想显示弹出并可以关闭的模式视图。

我该怎么做?

请帮忙。

提前致谢。

【问题讨论】:

【参考方案1】:

模态视图控制器始终在 iPhone 上全屏显示。如果不想隐藏标签栏,则需要以模态之外的其他方式呈现该视图。

【讨论】:

【参考方案2】:

通过将modalPresentationStyle 设置为.currentContext,我能够“呈现”一个新的视图控制器,另一个,UNDER标签栏。

let newViewController = UIViewController()
newViewController.view.backgroundColor = UIColor.red
newViewController.modalPresentationStyle = .currentContext
newViewController.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
present(newViewController, animated: true, completion: nil)

编辑:从更多的测试来看,如果有人在出现newViewController 时更改了选项卡,上面可能会有一些错误的行为。

为了“修复”,我创建了一个“切换器”——UIViewController,它在我想在标签栏下翻转的视图控制器之间进行动画处理:

view.addSubview(nextView)
UIView.transition(from: currentView,
   to: nextView,
   duration: 0.5,
   options: animation,
   completion:  (_) in
      currentView.removeFromSuperview()
   )

在这种情况下,currentView 是 ViewControllerOne 的视图(当前可见的),nextView 是 ViewControllerTwo 的视图(我们要呈现的那个)。

【讨论】:

【参考方案3】:

例如,如果 secondViewController 是您的第二个标签栏的第二个 viewController,您应该这样做:

[secondViewController.view addSubview:theViewYouWantToShow];

【讨论】:

【参考方案4】:

ios 中,模态视图控制器在所有可用的视图控制器中始终具有最高优先级。所以你不能在你的情况下使用模态视图控制器。

如果您只想在屏幕上显示具有背景可见性的弹出窗口,那么只需使用 UIAlertView。您可以根据需要添加确定或取消按钮以删除警报视图。

或者

如果您想显示具有标签栏可见性的完整视图,请将该标签中的视图添加为子视图。您可以使用视图的 transform 属性给它一种弹出窗口的感觉。

【讨论】:

【参考方案5】:

你可以通过设置PresentationStyle来模态呈现。这种风格呈现viewController是一个正方形,不占满屏。

self.modalPresentationStyle = UIModalPresentationFormSheet;

你也可以设置转场:

self.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

【讨论】:

以上是关于模态视图控制器隐藏标签栏的主要内容,如果未能解决你的问题,请参考以下文章

呈现一个模态视图控制器,但不要隐藏导航栏

从模态视图切换到标签栏视图控制器并且不会丢失标签栏

标签栏控制器中的模态视图

从标签栏控制器模态显示视图

ios标签栏点击显示模态视图黑屏

关闭模态呈现的视图控制器后切换标签栏控制器视图控制器