在Swift中弹出视图

我有一个弹出视图(没有标签栏),它弹出到带有标签栏的视图控制器。 在带有标签栏的视图控制器中,我设置了一个单击按钮,以便弹出视图控制器:

@IBAction func PopUpClicked(_ sender: UIButton) -> Void { let popOverVC = UIStoryboard(name: "SpinningWheel", bundle: nil).instantiateViewController(withIdentifier: "PhotoPopUp") as! PopUpViewController self.addChildViewController(popOverVC) popOverVC.view.frame = self.view.frame self.view.addSubview(popOverVC.view) popOverVC.didMove(toParentViewController: self) } 

在popOver视图控制器中,我为弹出窗口设置了动画。

 override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.black.withAlphaComponent(0.8) self.showAnimate() // Do any additional setup after loading the view. } func showAnimate() { self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) self.view.alpha = 0.0; UIView.animate(withDuration: 0.25, animations: { self.view.alpha = 1.0 self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) }); } func removeAnimate() { UIView.animate(withDuration: 0.25, animations: { self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) self.view.alpha = 0.0; }, completion:{(finished : Bool) in if (finished) { self.view.removeFromSuperview() } }); } 

但是当弹出窗口时,Everything有一个褪色的黑色背景,除了标签栏我想要它。 我希望Pop上的Pop也可以弹出tabbar,褪色的黑色背景也可以覆盖它。

这就是我想要的样子: 在此处输入图像描述

黑色褪色背景覆盖tabbar

发生这种情况,因为您必须将您的popover呈现为模态ViewController。 要实现这一点,您必须在从目标ViewController呈现弹出窗口之前设置模式演示样式。 应在您的呈现ViewController中调用此代码:

 let vc = YourPopOverViewController(nib: UINib(name: "PopOverViewController", bundle: nil), bundle: nil) vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext tabBarController.present(vc, animated: true) 

编辑:

如果您将PopOverViewController设计为全屏ViewController,这应该可以解决问题。 我做了很多次这样做,并留下了不应该作为清晰背景呈现的空间:

 @IBAction func PopUpClicked(_ sender: UIButton) -> Void { let popOverVC = UIStoryboard(name: "SpinningWheel", bundle: nil).instantiateViewController(withIdentifier: "PhotoPopUp") as! PopUpViewController popOverVc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext tabBarController.present(popOverVC, animated: true) 

}

第三方EzPopup可以轻松解决问题: https : //github.com/huynguyencong/EzPopup

 // init YourViewController let contentVC = ... // Init popup view controller with content is your content view controller let popupVC = PopupViewController(contentController: contentVC, popupWidth: 100, popupHeight: 200) // show it by call present(_ , animated:) method from a current UIViewController present(popupVC, animated: true)