【问题标题】:Pop Up View in SwiftSwift 中的弹出视图
【发布时间】:2017-06-22 20:46:41
【问题描述】:

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

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

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

这就是我想要的样子:

黑色褪色背景覆盖标签栏

【问题讨论】:

标签: ios swift


【解决方案1】:

发生这种情况是因为您必须将弹出框呈现为模态视图控制器。要实现这一点,您必须在从目标 ViewController 呈现弹出框之前设置模态呈现样式。这段代码应该在你展示的 ViewController 中调用:

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

tabBarController.present(vc, animated: true)

编辑:

如果您将PopOverViewController 设计为全屏视图控制器,这应该可以解决问题。我已经这样做了很多次,并留下了不应显示为清晰背景的空间:

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

【讨论】:

  • @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) popOverVC.modalPresentationStyle = UIModalPresentationStyle.overFullScreen }这个我试过了,不行
  • 你需要作为 UIModalPresentationStyle OverCurrentContext
  • 你可以在 UITabBarController 上展示它。我没看到你在用一个
  • popOverVc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext 这是应该在 tabbarcontroller 上显示的部分吗?
  • 如果设置cliptoBounds = false,我是否可以让视图大小真的很长。那行得通吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多