Ios 以模态方式呈现视图控制器

Ios 以模态方式呈现视图控制器,ios,swift,modalviewcontroller,Ios,Swift,Modalviewcontroller,我在登录页面中使用视图控制器时遇到问题。我可以让控制器出现,但我不能改变它的全尺寸 我试图用褪色的背景在屏幕中央呈现流行音乐。当我在视图外单击时,弹出框应关闭 我已经浏览了整个网站的问题和答案,没有找到一个适合我的 以下是我的代码: import UIKit class SignInView: UIViewController, UIPopoverPresentationControllerDelegate { override func viewDidLoad() { super

我在登录页面中使用视图控制器时遇到问题。我可以让控制器出现,但我不能改变它的全尺寸

我试图用褪色的背景在屏幕中央呈现流行音乐。当我在视图外单击时,弹出框应关闭

我已经浏览了整个网站的问题和答案,没有找到一个适合我的

以下是我的代码:

import UIKit

class SignInView: UIViewController, UIPopoverPresentationControllerDelegate {


override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "popoverSegue" {

    var popover = segue.destination as! SignInPopView
    popover.popoverPresentationController!.delegate = self
    popover.modalPresentationStyle = UIModalPresentationStyle.popover
    popover.preferredContentSize = CGSize(width: 375, height: 500)

    }

}

要使视图控制器显示为弹出窗口,应设置以下内容:

popupVC.modalPresentationStyle=.OverCurrentContext

popupVC.modalTransitionStyle=.CrossDissolve

还要设计视图控制器的位置和大小,使其看起来像一个弹出窗口。 你也可以用那是个不错的豆荚
我使用EzPopup,它对我有效

这个答案对我有效:


我的解决方案是为新的视图控制器创建一个模态序列。将内容放置在视图控制器内的视图中,并将视图控制器背景不透明度设置为所需的量。这一切都可以通过故事板来完成

这样,当弹出视图控制器出现时,视图以正确的大小显示在我想要的位置,并且前一个视图控制器在后台仍然可见

我遇到的唯一问题是,当我在视图外单击时,会忽略模式popover

这段视频很有帮助:


编辑:这提供了一种解决方案,可以在你触摸视图外时取消模式。这是在手机上还是在iPad上?我问,它也可以用于此,因为除非你告诉iOS,否则iPhone上会以模式显示popover,但这不是popover。我想它更像是模式或弹出窗口,而不是带箭头的popover。不管怎样,这正是我想要的。我更新了答案,告诉你当你触摸到外面的时候,如何消除模态。但是如果这就是你想要的,称它为popover是不公平的,也是误导性的。我同意,这是一个诚实的错误,因为它们非常相似。我会更改问题的标题,以免引起混淆。无论哪种方式,这都是解决一般问题的全功能解决方案。
class CommonViewController: UIViewController, UIPopoverPresentationControllerDelegate{

func adaptivePresentationStyle(
for controller: UIPresentationController,
    traitCollection: UITraitCollection)
    -> UIModalPresentationStyle {
        return .none
}

func showPopover(){
    let storyboard = UIStoryboard(name: "Pickers", bundle: nil)
    let myViewController = UIViewController()
    myViewController.preferredContentSize = CGSize(width: 320, height: 200)
    myViewController.modalPresentationStyle = .popover

    let popOver = myViewController.popoverPresentationController
    popOver?.delegate = self

    self.present(myViewController, animated: true, completion: nil)
    popOver?.permittedArrowDirections = .init(rawValue: 0)
    popOver?.sourceView = self.view

    let rect = CGRect(
        origin: CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/2),
        size: CGSize(width: 1, height: 1)
    )
    popOver?.sourceRect = rect
}