模态呈现视图控制器

时间:2018-11-24 03:32:28

标签: ios swift modalviewcontroller

我在使用View Controller模版登录页面时遇到问题。我可以显示控制器,但不能将其从完整大小更改。

我正在尝试在屏幕中央显示带有渐变背景的弹出框。当我在视图外部单击时,弹出窗口应关闭。

我浏览了整个站点的问题和答案,却没有找到对我有用的东西。

这是我的代码:

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)

    }

}

3 个答案:

答案 0 :(得分:1)

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

  

popupVC.modalPresentationStyle = .OverCurrentContext

     

popupVC.modalTransitionStyle = .CrossDissolve

还要设计视图控制器的位置和大小,使其看起来像弹出窗口。 您也可以使用 scala style guide 这是一个不错的广告连播 我使用EzPopup,它对我有用

答案 1 :(得分:0)

这个答案对我有用: https://stackoverflow.com/a/46518387/640588

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
}

答案 2 :(得分:0)

我的解决方案是为新的视图控制器创建模式选择。将内容放置在视图控制器内的视图中,并将视图控制器的背景不透明度设置为所需的数量。这都可以通过情节提要完成。

这样,当弹出视图控制器出现时,视图就会以正确的大小显示在我想要的位置,并且在背景后面仍然可以看到以前的视图控制器。

我唯一遇到的问题是在视图外部单击时关闭模式弹出窗口。

此视频很有帮助:https://www.youtube.com/watch?v=S5i8n_bqblE

编辑:此Detect any tap outside the current view提供了在您触摸视图外部时消除模态的解决方案。

相关问题