模态视图控制器隐藏标签栏
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;
【讨论】:
以上是关于模态视图控制器隐藏标签栏的主要内容,如果未能解决你的问题,请参考以下文章