以模态方式呈现视图控制器
Presenting a View Controller Modally
我在使用视图控制器模式登录页面时遇到问题。我可以让控制器出现,但我无法将其更改为全尺寸。
我试图在屏幕中央显示带有褪色背景的弹出窗口。当我在视图外单击时,弹出窗口应该消失。
我浏览了整个网站的问题和答案,但没有找到适合我的。
这是我的代码:
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 那是一个不错的 pod
我使用 EzPopup,它对我有用
这个答案对我有用:
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
}
我的解决方案是为新的视图控制器创建一个模式转场。将内容放在视图控制器内的视图中,并将视图控制器的背景不透明度设置为所需的数量。这一切都可以通过故事板来完成。
这样,当弹出视图控制器出现时,视图会以正确的大小出现在我想要的位置,并且前一个视图控制器在背景后面仍然可见。
我遇到的唯一问题是当我在视图外单击时关闭模式弹出窗口。
此视频很有帮助:https://www.youtube.com/watch?v=S5i8n_bqblE
编辑:此 Detect any tap outside the current view 提供了在您触摸视图外部时关闭模态框的解决方案。
我在使用视图控制器模式登录页面时遇到问题。我可以让控制器出现,但我无法将其更改为全尺寸。
我试图在屏幕中央显示带有褪色背景的弹出窗口。当我在视图外单击时,弹出窗口应该消失。
我浏览了整个网站的问题和答案,但没有找到适合我的。
这是我的代码:
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 那是一个不错的 pod 我使用 EzPopup,它对我有用
这个答案对我有用:
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
}
我的解决方案是为新的视图控制器创建一个模式转场。将内容放在视图控制器内的视图中,并将视图控制器的背景不透明度设置为所需的数量。这一切都可以通过故事板来完成。
这样,当弹出视图控制器出现时,视图会以正确的大小出现在我想要的位置,并且前一个视图控制器在背景后面仍然可见。
我遇到的唯一问题是当我在视图外单击时关闭模式弹出窗口。
此视频很有帮助:https://www.youtube.com/watch?v=S5i8n_bqblE
编辑:此 Detect any tap outside the current view 提供了在您触摸视图外部时关闭模态框的解决方案。