ios Swift 中的弹出视图

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/44709096/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 09:16:16  来源:igfitidea点击:

Pop Up View in Swift

iosswift

提问by juelizabeth

I have a popover view (without a tab bar) that is popped over to a view controller with a tab bar. In the view controller with a tab bar I set up a button to click, so that the view controller pops up:

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

  @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)
    }

And in the popOver view controller, i animated the pop over.

在 popOver 视图控制器中,我为 pop over 设置了动画。

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()
                }
            });
        }

But when the popover happens, Everything has a faded black background, which I want except for the tab bar. I would like for the pop over View to also pop over the tabbar and for the faded black background to go over it.

但是当弹出窗口发生时,一切都有一个褪色的黑色背景,除了标签栏外,我想要。我希望弹出视图也弹出标签栏,并让褪色的黑色背景越过它。

This is what I want it to look like: enter image description here

这就是我想要的样子: 在此处输入图片说明

With the black faded background covering the tabbar

黑色褪色背景覆盖标签栏

回答by weissja19

This happens, because you have to present your popover as a modal ViewController. To achieve this you have to set the modal presentation style before presenting your popover from your target ViewController. This code should be called in your presenting ViewController:

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

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

tabBarController.present(vc, animated: true)

EDIT:

编辑:

This should do the trick if you have designed your PopOverViewControlleras a fullscreen ViewController. I have done this a bunch of times and have left the space which should not be presented as clear background:

如果您将自己设计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)
}

回答by huync

This 3rd party EzPopup can resolve the problem easily: https://github.com/huynguyencong/EzPopup

这个 3rd 方 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)