Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在iPhone上以编程方式在Swift中将UIViewController显示为popover_Ios_Swift_Uiviewcontroller_Popover - Fatal编程技术网

Ios 如何在iPhone上以编程方式在Swift中将UIViewController显示为popover

Ios 如何在iPhone上以编程方式在Swift中将UIViewController显示为popover,ios,swift,uiviewcontroller,popover,Ios,Swift,Uiviewcontroller,Popover,我通常按照这里的说明进行操作: 但是,正如其评论中所讨论的,无论首选内容大小或源rect,popover始终全屏显示 显示popover的按钮: func buttonClicked(sender: UIButton!) { let ac = EmptyViewController() as UIViewController ac.modalPresentationStyle = .Popover ac.preferredContentSize = CGSizeMake(

我通常按照这里的说明进行操作:

但是,正如其评论中所讨论的,无论
首选内容大小
源rect
,popover始终全屏显示

显示popover的按钮:

func buttonClicked(sender: UIButton!) {
    let ac = EmptyViewController() as UIViewController
    ac.modalPresentationStyle = .Popover
    ac.preferredContentSize = CGSizeMake(200, 200)
    let popover = ac.popoverPresentationController
    popover?.delegate = self
    popover?.permittedArrowDirections = .Any
    popover?.sourceView = self.view
    popover?.sourceRect = CGRect(x: 100, y: 100, width: 100, height: 100)

    presentViewController(ac, animated: true, completion: nil)
}
UIViewController:

import UIKit

class EmptyViewController : UIViewController {
    override func viewDidLoad() {
        view.backgroundColor = UIColor.redColor()
    }
}

我想知道如何使它成为一个真正的流行音乐(不是全屏大小)。顺便说一句,正如@EI Captain所指出的,它在iPad上工作得很好,但在iPhone上总是全屏显示


您无法在iPhone中使用此代码在肖像模式下执行此操作。。。你可以查一下

它建议:

在iOS 8及更高版本中,您可以使用UIPopoverPresentationController来呈现popover。UIPopoverPresentationController定义一个委托,允许您调整popover内容的显示样式以适应当前的显示环境。例如,在水平规则的环境中,您的内容可以显示在popover中在水平紧凑的环境中,您的内容可以在全屏模式视图中显示。


正如我所说,如果你可以登录iPad,你的内容就可以显示在popover中。

这是可能的!我不确定从什么时候开始

在显示为弹出框的
UIViewController
viewDidLoad
中:

    self.preferredContentSize = CGSize(width: myWidth, height: myHeight)
在显示popover的
UIViewController
中,将类设置为
UIPopopOverpresentationControllerDelegate
,然后:

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

    if segue.identifier == "Identifier" {
        let vc: UIViewController = segue.destination

        let pvc = vc.popoverPresentationController
        pvc?.delegate = self
        return
    }

}

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
    return .none
}
PS:在故事板中,不要忘记将segue类设置为“作为Popover呈现”


就这样

对于那些正在寻找如何摆脱segue的人您只需要实现
UIPopoverPresentationControllerDelegate
协议的下一种方法:

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

在带有肖像模式的iPhone中,使用此代码,popover始终处于全屏状态。。。在iPad中,它可以完美地工作。。。仍然要检查这个@EICaptain,你是对的,它在iPad上工作得非常好。但是,本教程正在使用IB。我想知道如何使其以编程方式工作。您可能需要自定义视图或使用任何库,这可能对您有帮助。。。没有segue怎么办?