在我的基于选项卡的应用程序中,单击其中一个选项卡时,我想显示一个带有一些信息的模态视图控制器。在我的应用程序委托的 didSelectViewController 方法中,我添加了模态视图。但它占据了整个屏幕并隐藏了标签栏。我不想隐藏标签栏,只想显示弹出并可以关闭的模态视图。
我该怎么做?
请帮忙。
提前致谢。
在我的基于选项卡的应用程序中,单击其中一个选项卡时,我想显示一个带有一些信息的模态视图控制器。在我的应用程序委托的 didSelectViewController 方法中,我添加了模态视图。但它占据了整个屏幕并隐藏了标签栏。我不想隐藏标签栏,只想显示弹出并可以关闭的模态视图。
我该怎么做?
请帮忙。
提前致谢。
模态视图控制器总是在 iPhone 上全屏显示。如果您不想隐藏标签栏,那么您需要以除模态之外的其他方式呈现此视图。
通过设置modalPresentationStyle
为.currentContext
. _ _ _
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 的视图(我们要呈现的)。
例如,如果 secondViewController 是您的第二个标签栏的第二个 viewController,您应该这样做:
[secondViewController.view addSubview:theViewYouWantToShow];
在 iOS 中,模态视图控制器在所有可用的视图控制器中始终具有最高优先级。所以你不能在你的情况下使用模态视图控制器。
如果您只想在屏幕上显示具有背景可见性的弹出窗口,则只需使用UIAlertView。您可以根据需要添加确定或取消按钮以删除警报视图。
或者
如果要显示具有选项卡栏可见性的完整视图,请将该选项卡中的视图添加为子视图。您可以使用视图的transform属性给它一种弹出的感觉。
您可以通过设置PresentationStyle来模态地呈现它。这种样式将viewController呈现在一个正方形中,并且不占满屏幕。
self.modalPresentationStyle = UIModalPresentationFormSheet;
您还可以设置过渡:
self.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;