斯威夫特| UIViewController没有显示为PopUp,而是全屏显示

时间:2019-05-17 06:38:25

标签: swift popup uipopovercontroller popupwindow modalviewcontroller

因此,我有一个ViewController,它基本上是一个警报窗口,应该是一个弹出窗口,并通过在其框架外点击来关闭。

但是,每当我调用该VC时,它始终以全屏显示,而不是弹出窗口。

我尝试了几种方法来做到这一点,如下所述。

 if let exp : String = expiredVehicles[i] {
        expiredVehicleNumber = expiredVehicles[i]
            let popUpVC = SubscriptionExpired()
            popUpVC.modalTransitionStyle = .crossDissolve
            popUpVC.modalPresentationStyle = .popover // also tried other presentation styles but none work and it is still fullscreen
            popUpVC.view.backgroundColor = UIColor.white.withAlphaComponent(0.8)
            self.present(popUpVC, animated: true, completion: nil)
        }

万一有人需要查看该VC的定义,我将很乐意分享它

我觉得我应该提到要显示为弹出窗口的VC继承了UIViewController

任何有帮助的见识都将是很棒的。

感谢您的输入

3 个答案:

答案 0 :(得分:0)

一种可能的方法是在视图中添加一个轻击手势识别器,以关闭VC。

但这仅在此弹出窗口具有只读信息且不需要用户采取任何进一步操作的情况下才有用。

func addTapRecognizer(){
    let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap))
    self.view.addGestureRecognizer(tap)
}

@objc func handleTap(){
       // dismiss the VC here
    }
}

答案 1 :(得分:0)

您可以调用以下方法来显示弹出窗口:

    let popupVC = SubscriptionExpired()
    popupVC.modalPresentationStyle = .overCurrentContext
    self.addChild(popupVC)
    popupVC.view.frame = self.view.frame
    self.view.addSubview(popupVC.view)
    popupVC.didMove(toParent: self)
}

然后,要删除该弹出窗口,您可以使用:

UIView.animate(withDuration: 0.25, animations: {
    self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
    self.view.alpha = 0.0
}, completion: { (finished) in
    if finished {
        self.view.removeFromSuperview()
    }
})

在这种情况下,我在弹出窗口中有一个按钮,只要在方法上方按下的按钮触发。你可以试试看吗?我可以根据您的需要编辑答案。

答案 2 :(得分:0)

您需要在展示视图控制器中实现这一点:

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
    // Return no adaptive presentation style, use default presentation behaviour
    return .none
}

UIPopoverPresentationController displaying popover as full screen