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